请考虑以下代码:
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)
值a和b始终是相同的.
C标准是否说过关于移位超过32位(类型的宽度int)的任何内容,还是这种未指定的行为?
sar*_*old 14
从我的WG12/N1124草案(不是标准,但对我来说足够好),在6.5.7 按位移位运算符中有以下块:
如果右操作数的值为负或大于或等于提升的左操作数的宽度,则行为未定义.
所以,未定义.小心.
| 归档时间: |
|
| 查看次数: |
1651 次 |
| 最近记录: |