Java Bit Shift Left Returns Wrong Value
I'm having problems with left bit shifts in Java returning incorrect values...
Take 108 << 60 for instance. The answer should be*:
Java is returning this value
for this statement:
System.out.println(108L << 60L);
Why??? Both values are forced longs... so I see no reason why any bit values should be truncated. What am I missing here?
*Citation: Wolfram Alpha
You are shifting beyond the length of a long (64 bits). 108 occupies seven bits, so 108L << 60L requires 67 bits to represent it correctly. Actually, since it's a signed type, you'd need 68 bits to avoid having it interpreted as a negative number.