什么是关于'>>>'的用法java中的运算符?

时间:2010-11-29 07:20:04

标签: java bit-manipulation

  

可能重复:
  Java's >> versus >>> Operator?

您好,

我知道>><<可以改善效果,但>>>运营商的目的是什么?

JDK源文件中的PriorityQueue类,

 private void heapify() {
    for (int i = (size >>> 1) - 1; i >= 0; i--)
        siftDown(i, (E) queue[i]);
}

不要告诉我>>>是如何工作的,也就是我使用它的原因。

谢谢

3 个答案:

答案 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;。