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