示例代码,下面中的">>>"是什么意思呢:

private static int findDuplicate(int[] array) {        
   int low = 0;        
   int high = array.length - 1;
   while (low <= high) {            
       int mid = (low + high) >>> 1;
       System.out.println(mid);
       int midVal = array[mid];
       if (midVal == mid)
           low = mid + 1;            
       else
           high = mid - 1;
   }
   return high;
}

>>>运算符是Java 中的无符号右位移运算符它有效地将操作数除以2右操作数的幂,或者就2在这里。

>>之间的差异>>>只会在移动负数时出现。如果它是 a ,则>>运算符将一位1移入最高有效位,并且无论如何都移入1>>>0

更新:

让我们平均12147483647Integer.MAX_VALUE)。我们可以很容易地做数学:

(1 + 2147483647) / 2 = 2147483648 / 2 = 1073741824

现在,使用代码(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.


阅读原文