wiegand studio que programacion móviles desarrollo curso aplicaciones c++ binary bit-manipulation bitwise-operators bit-shift

c++ - studio - ¿Por qué sigue funcionando el cambio de más de los bits permitidos?



wiegand que es (1)

Los argumentos para << se amplían implícitamente a int , y el resultado de x << 10 también es un int .

Tengo un int8_t y quería ver qué pasaría si lo cambio más allá de 8 bits. Entonces esto es lo que hice:

int8_t x = 1; std::cout << (x << 10);

Por alguna razón, esto devuelve 1024 como si el tipo contuviera suficientes bits para representar ese número. Pensé que cuando cambiaras más de los bits dados obtendrías 0 en todos los bits (o desbordamiento / desbordamiento con signo que lleva a un comportamiento indefinido). Además, ejecuté este código para darme el número máximo de int8_t :

std::numeric_limits<int8_t>::max(); // 127

El número máximo de este tipo es 127, pero al desplazarlo a la izquierda puede hacerlo incluso más alto que su tipo sin firmar. ¿Cómo es esto posible?