C标准对比类型宽度移位更多的位怎么说?

C标准对比类型宽度移位更多的位怎么说?,c,bit-shift,C,Bit Shift,考虑以下代码: int i = 3 << 65; int i, s; int a = i << s; int b = i << (s & 31); a和b的值始终相同 C标准是否说明移位超过32位(类型int的宽度)或这是未指定的行为?根据我的WG12/N1124草案(不是标准,但对我来说已经足够好),6.5.7位移位运算符中有以下代码块: 如果右操作数的值为负或为 大于或等于提升的左操作数的宽度,行为未定义 所以,未定义。小心。“对我来说足够好”

考虑以下代码:

int i = 3 << 65;
int i, s;
int a = i << s;
int b = i << (s & 31);
a
b
的值始终相同

C标准是否说明移位超过32位(类型
int
的宽度)或这是未指定的行为?

根据我的WG12/N1124草案(不是标准,但对我来说已经足够好),6.5.7位移位运算符中有以下代码块:

如果右操作数的值为负或为 大于或等于提升的左操作数的宽度,行为未定义


所以,未定义。小心。

“对我来说足够好”——对每个人来说都足够好,因为标准包含完全相同的语言。:-)请注意,您也可以在免费获得C99+TC3,而且它也有相同的语言,因此,即使您没有标准本身,您也可以非常确定它说了什么!您还可以在此处获得一个更易于阅读的html版本:@R…,哦,谢谢,这比PDF更容易阅读。:)@吉姆:谢谢你的确认和链接——当我需要这些链接时,我永远找不到它们