您好,
我知道>>
或<<
可以改善效果,但>>>
运营商的目的是什么?
JDK源文件中的PriorityQueue类,
private void heapify() {
for (int i = (size >>> 1) - 1; i >= 0; i--)
siftDown(i, (E) queue[i]);
}
不要告诉我>>>
是如何工作的,也就是我使用它的原因。
谢谢
答案 0 :(得分:6)
>>
运算符会保留最左边的位,但>>>
不会。
这意味着,如果您使用>>
移动一个负数,则它会保持为负数,但如果您使用>>>
则不会。{/ p>
因此,使用>>
进行数学运算,使用>>>
进行位基数运算。
答案 1 :(得分:3)
使用<<
,>>
和>>>
对表示位模式的整数类型进行操作。
请勿使用它们来“加速”乘法和除法。它可能没有任何区别,实际上可能会使你的代码变慢。
Java JIT编译器应该能够为简单的算术表达式生成机器代码,这些算法表达式对于当前运行的硬件来说是最佳的。
如果使用聪明的屏蔽和移位来实现算法,则有可能1)代码对于您运行的机器不是最佳的,2)JIT优化器不会发现您实际上是做算术...因此无法优化。最终结果将是较慢的代码。
答案 2 :(得分:0)
&gt;&gt;之间的差异和&gt;&gt;&gt;运营商是&gt;&gt;是为了无符号班次。这意味着&gt;&gt;&gt;当&gt;&gt;时清除大多数左边的位保留该位的值(因为实际上这个位意味着负值) 例: 你有价值FFFFFFFEh = -2(签名)然后:
-2&gt;&gt; 1 = FFFFFFFF = -1 //&gt;&gt;保留最高位值;请注意,如果我们将FFFFFFFF视为无符号值
,则会出错-2&gt;&gt;&gt; 1 = 7FFFFFFF //&gt;&gt;&gt;清除最高位
因此,如果您想使用无符号值进行操作,则应使用&gt;&gt;&gt;而不是&gt;&gt;。