What's going on here? I'm expecting the answer 0, but get 2.
#include <stdio.h> int main(){ unsigned x=1; printf("%u\n",(x<<33)); /* outputs "2" on gcc 4.1.2 on x86_32 */ /* [#4] The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits are filled with zeros. If E1 has an unsigned type, the value of the result is E1*2^E2, reduced modulo one more than the maximum value representable in the result type. http://std.dkuug.dk/JTC1/SC22/WG14/www/docs/n843.htm */ return 0; }