Почему сдвиг больше допустимых битов все еще работает?

у меня есть int8_t и я хотел посмотреть, что произойдет, если я сдвину его влево дальше, чем на 8 бит. Так вот что я сделал:

int8_t x = 1;

std::cout << (x << 10);

По некоторым причинам это возвращает 1024, как если бы тип содержал достаточно битов, чтобы представить это число. Я думал, что когда вы сдвигаете больше, чем заданные биты, вы получите 0 во всех битах (или переполнение / недополнение со знаком, что приводит к неопределенному поведению). Кроме того, я запустил этот код, чтобы дать мне максимальное количество int8_t:

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

Максимальное число этого типа — 127, но смещение влево может сделать его даже выше, чем его тип без знака! Как это возможно?

4

Решение

Аргументы << неявно расширяются intи результат x << 10 также int,

9

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector