What does the C standard say about bitshifting more bits than the width of type?
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?
Solution 1:
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.