¿Qué imprimiría este código? Int x; char y x = 0xff0a; y = x; printf (‘% d \ n’, y);

En mi sistema imprime 10 . Veamos si podemos descubrir por qué.

Arreglé el error tipográfico “Int” y lo compilé:

#include
main () {int x; char y x = 0xff0a; y = x; printf (“% d \ n”, y); }

En un sizeof(x)=8 sistema típico de sizeof(x)=8 o 4 bytes, lo que significa 64 o 32 bits. No importará aquí. Por supuesto sizeof(y)=1 – un carácter es 1 byte, 8 bits.

0xff0a es una constante hexadecimal. Cada dígito es de cuatro bits. Va de 0 a 15 (también conocido como f ). Entonces dos dígitos forman un byte, ocho dígitos a 32 bit int. Aquí tenemos un valor de cuatro dígitos, 16 bits, por lo que cabe cómodamente en x , un int .

Se pone interesante en y=x; Aquí nuestro valor largo de 16 bits ff0a se asigna a un byte de 8 bits y . Lo que sucede es que solo obtenemos el orden bajo de ocho bits. Es equivalente a y=x&0xff; donde enmascaramos todos menos los ocho bits de orden inferior.

Entonces terminamos con solo el 0a convirtiéndolo en y. La letra a es, por supuesto, hexadecimal para el decimal 10, que es lo que imprimimos con %d .

Podría haberse vuelto más complicado si los bits de la señal se hubieran involucrado, pero me detendré aquí.