Java中的“ >>>”是什么意思?
我发现此代码可在此处找到SO中的重复项。但我不明白这条线是什么意思int mid = (low + high) >>> 1;
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
在此处。
>>
和之间的差异>>>
仅在移动负数时才会显示。如果>>
运算符1
是a
1
,则运算符会将其移位到最高有效位,而无论如何都将>>>
移位0
。
让我们求平均值1
和2147483647
(Integer.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.
以上是 Java中的“ >>>”是什么意思? 的全部内容, 来源链接: utcz.com/qa/405210.html