В соответствии с ответом на this questions:
Результат E1 < E2 - это E1 левое смещение E2; освобожденные биты заполняются нулями. Если E1 имеет неподписанный тип, значение результата E1 × 2 E2, приведенное по модулю больше, чем максимальное значение, представляемое в результат. Если E1 имеет подписанный тип и неотрицательное значение, а E1 × 2 E2 представляется в типе результата, то это результирующее значение; в противном случае поведение не определено.
Похоже, что 1 << 31
- undefined.
Однако GCC не выдает предупреждение, если я использую 1 << 31
.
Он выпускает один для 1 << 32
.
ссылка
Итак, что это? Я не понимаю стандарт? У GCC есть своя интерпретация?