C标准对于比特类型宽度的位移更多的比特说了些什么?

bcm*_*inc 10 c bit-shift

请考虑以下代码:

int i = 3 << 65;
Run Code Online (Sandbox Code Playgroud)

我希望结果是i==0,但实际结果是i==6.通过一些测试,我发现使用以下代码:

int i, s;
int a = i << s;
int b = i << (s & 31);
Run Code Online (Sandbox Code Playgroud)

ab始终是相同的.

C标准是否说过关于移位超过32位(类型的宽度int)的任何内容,还是这种未指定的行为?

sar*_*old 14

从我的WG12/N1124草案(不是标准,但对我来说足够好),在6.5.7 按位移位运算符中有以下块:

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

所以,未定义.小心.

  • 你还可以在这里获得更多读者友好的HTML版本:http://port70.net/~nsz/c/c99/n1256.html (3认同)