Рассмотрим следующий код:
int i = 3 << 65;
Я ожидаю, что результат будет i==0
, однако фактический результат будет i==6
. Проведя некоторое тестирование, я обнаружил, что со следующим кодом:
int i, s;
int a = i << s;
int b = i << (s & 31);
значения a
и b
всегда одинаковы.
Говорит ли стандарт C что-нибудь о смещении более чем на 32 бита (ширины типаint
)или это неопределенное поведение?