Что говорит стандарт C о смещении большего количества битов, чем ширина типа?

Рассмотрим следующий код:

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)или это неопределенное поведение?

10
задан bcmpinc 30 June 2012 в 00:31
поделиться