Estoy obteniendo resultados del turno de la izquierda al que no pude encontrar una explicación.Por qué el resultado de char sin signo << char sin signo no está sin signo char
unsigned char value = 0xff; // 1111 1111
unsigned char = 0x01; // 0000 0001
std::cout << "SIZEOF value " << sizeof(value) << "\n"; // prints 1 as expected
std::cout << "SIZEOF shift " << sizeof(shift) << "\n"; // prints 1 as expected
std::cout << "result " << (value << shift) << "\n"; // prints 510 ???
std::cout << "SIZEOF result " << sizeof(value << shift) << "\n"; // prints 4 ???
que estaba esperando resultado sea 1111 1110
pero en cambio me sale int
(?) Con el valor de 1 1111 1110
.
¿Cómo se pueden desplazar los bits de un carácter sin signo hacia la izquierda para que los bits se trunquen y el resultado sea 1111 1110?
Lo que trato de hacer es leer series de bytes e interpretarlas como enteros de longitudes variables (1-32 bits).
F0 F5
1111 0000 1111 0101
podría ser
0F (first 4 bits)
0F (next 8 bits)
05 (last 4 bits)
Tiene esto algo que ver con el hecho de que la aritmética no se hace con los tipos más pequeños que int?
11111111 << 1 es de hecho 111111110, está imprimiendo el resultado de la expresión, intente hacer: 'value = value << shift;' y luego 'cout << value;' – Yaniro