What does the C standard say about bitshifting mor

2020-01-23 10:17发布

Consider the following code:

int i = 3 << 65;

I would expect that the result is i==0, however the actual result is i==6. With some testing I found that with the following code:

int i, s;
int a = i << s;
int b = i << (s & 31);

the values of a and b are always the same.

Does the C standard say anything about shifting more than 32 bits (the width of type int) or is this unspecified behavior?

标签: c bit-shift
1条回答
\"骚年 ilove
2楼-- · 2020-01-23 10:41

From my WG12/N1124 draft (not the standard, but Good Enough For Me), there's the following block in 6.5.7 Bitwise shift operators:

If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined.

So, undefined. Be careful.

查看更多
登录 后发表回答