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?
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:
So, undefined. Be careful.