Javaの左ビットシフトが誤った値を返すという問題があります...
たとえば、108<<60とします。答えは次のようになります*:
124515522497539473408
Javaはこの値を返します
-4611686018427387904
このステートメントの場合:
System.out.println(108L << 60L);
なぜ???どちらの値も強制的にlongになります...したがって、ビット値を切り捨てる必要がある理由はわかりません。ここで何が欠けていますか?
*引用:Wolfram Alpha