Weird result of Java Integer left shift
As per the Java Language Specification 15.19. Shift Operators
(slightly paraphrased):
If the promoted type of the left-hand operand is
int
, only the five lowest-order bits of the right-hand operand are used as the shift distance. It is as if the right-hand operand were subjected to a bitwise logical AND operator&
with the mask value0x1f
,or0b11111
. The shift distance actually used is therefore always in the range0
to31
, inclusive.
That means that (for example) 33
, being the 6-bit binary 100001
, is reduced to the 5-bit 00001
before being used. So x << 33
is identical to x << 1
.