a<<b
and 1<<32
are undefined behaviour, because your right operand is equal to the number of bits.
C11 §6.5.7 Bitwise shift operators
Paragraph 3:
The integer promotions are performed on each of the operands. The
type of the result is that of the promoted left operand.The result is
undefined if the right operand is negative, or greater than or equal
to the number of bits in the left expression’s type.
Paragraph 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 × 2E2
, reduced modulo one more than the maximum value
representable in the result type. 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.
So, if the number is shifted more than the size of integer, the behaviour is undefined.
GCC generated warning:
warning: left shift count >= width of type [-Wshift-count-overflow]
printf("%d\n%d",a<<b,1<<32);