この>>>
演算子は、Java の符号なし右ビット シフト演算子です。2
これは、オペランドを右オペランドの累乗、またはここで効果的に除算し2
ます。
との違いは>>
、>>>
負の数をシフトする場合にのみ表示されます。>>
演算子は1
、最上位ビットが の場合はビットを1
シフト>>>
し、0
関係なく a をシフトします。
アップデート:
1
と2147483647
( ) を平均しましょうInteger.MAX_VALUE
。簡単に計算できます。
(1 + 2147483647) / 2 = 2147483648 / 2 = 1073741824
ここで、 code を使用すると、(low + high) / 2
関連するビットが次のようになります。
1: 00000000 00000000 00000000 00000001
+2147483647: 01111111 11111111 11111111 11111111
================================================
-2147483648: 10000000 00000000 00000000 00000000 // Overflow
/2
================================================
-1073741824: 11000000 00000000 00000000 00000000 // Signed divide, same as >> 1.
に「シフト」しましょう>>>
:
1: 00000000 00000000 00000000 00000001
+2147483647: 01111111 11111111 11111111 11111111
================================================
-2147483648: 10000000 00000000 00000000 00000000 // Overflow
>>> 1
================================================
+1073741824: 01000000 00000000 00000000 00000000 // Unsigned shift right.