If E1 has a signed
type and nonnegative value, and E1 ´ 2E2 is representable in the result type, then that is
the resulting value; otherwise, the behavior is undefined.
well, certainly it's not that the compiler is generating the wrong code.
the question is why using sall with a 1 and 32 gives you 1