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?