Предостережение:. Многие программисты знают об этом и избегают отрицательных сдвигов, часто игнорируются, что также считается >= размер бита значения также undefined. Это делает что-то вроде ((unsigned int)1 << 32) - 1 на самом деле undefined, если unsigned int имеет 32 бита или меньше. Для подписанных значений вещи становятся более сложными из-за знака (спасибо @chux за то, что указали на меня). Это обычная ошибка. Для некоторых реализаций могут возникать разные результаты для постоянных выражений (оценка времени компиляции) и оценка времени выполнения.
Ответ 2
Как сказал Олаф в своем ответе, смещение слева отрицательным числом undefined.
Фактически gcc выдаст предупреждение, если вы попытаетесь сдвинуть в любом направлении отрицательное число.
Ответ 3
Побитовый оператор сдвига влево в C:
Бит. Структура данных может быть сдвинута на указанное количество позиций налево.
Когда данные сдвинуты влево, конечные нули заполняются нулем.
Оператор с левой стороны - двоичный оператор [Bi - two]
Двоичные средства, Оператор, для которого требуются два аргумента!
Синтаксис:
**[variable]<<[number of places]**
Если число мест станет отрицательным, оно будет undefined