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?