Почему смещение больше, чем допустимые биты, все еще работает?
У меня есть int8_t
, и я хотел посмотреть, что произойдет, если я сдвину его влево дальше, чем на 8 бит. Вот что я сделал:
int8_t x = 1;
std::cout << (x << 10);
По какой-то причине это возвращает 1024, как если бы тип содержал достаточно битов, чтобы представить это число. Я думал, что когда вы сдвигаете больше, чем заданные биты, вы получите 0 во всех битах (или знаковое переполнение/underflow, которое приводит к неопределенному поведению). Кроме того, я запустил этот код, чтобы дать мне максимальное число int8_t
:
std::numeric_limits<int8_t>::max(); // 127
Максимальное число этого тип 127, но смещение его влево может сделать его даже выше, чем его беззнаковый тип! Как такое возможно?