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.
- Cómo resolver [matemáticas] \ log x ^ {\ log x} = 10 ^ {- 6} x [/ matemáticas]
- ¿Cuál es la distancia entre los puntos [2,5] y [5,7]?
- ¿Cuál es el significado de integral de sinx?
- Cómo evaluar [math] \ int \ mathrm {e} ^ {x} \ frac {x ^ 2 + 1} {(x + 1) ^ 2} \ mathrm {d} x [/ math]
- ¿Cuál es la suma de todas las raíces de la ecuación [matemáticas] x ^ 5 + 3x ^ 3 – 4x ^ 2 + 8x + 9 = 0 [/ matemáticas]?
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í.