Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
考虑以下代码:
int i = 3 << 65;
我希望结果是i==0,但实际结果是i==6。通过一些测试,我发现使用以下代码:
i==0
i==6
int i, s; int a = i << s; int b = i << (s & 31);
a和的值b始终相同。
a
b
C 标准是否说明移动超过 32 位(类型的宽度int)或者这是未指定的行为?
int
从我的 WG12/N1124 草案(不是标准,但对我来说足够好),6.5.7位移位运算符中有以下块:
如果右操作数的值为负数或大于或等于提升的左操作数的宽度,则行为未定义。
所以,未定义。当心。