【问题标题】:What do << or >>> in java mean? [duplicate]java中的<<或>>>是什么意思? [复制]
【发布时间】:2012-11-14 21:09:47
【问题描述】:

可能重复:
What does >> and >>> mean in Java?

我在一些 java 代码中遇到了一些不熟悉的符号,虽然代码可以正确编译和运行,但我对尖括号在这段代码中的作用感到困惑。我在com.sun.java.help.search.BitBuffer找到了代码,其中的一个片段如下:

public void append(int source, int kBits)
    {
        if (kBits < _avail)
        {
            _word = (_word << kBits) | source;
            _avail -= kBits;
        }
        else if (kBits > _avail)
        {
            int leftover = kBits - _avail;
            store((_word << _avail) | (source >>> leftover));
            _word = source;
            _avail = NBits - leftover;
        }
        else
        {
            store((_word << kBits) | source);
            _word = 0;
            _avail = NBits;
        }
    }

那些看起来神秘的括号有什么作用?它几乎看起来像 c++ 插入/提取,但我知道 Java 没有这样的东西。

另外,我尝试用谷歌搜索它,但由于某种原因,谷歌似乎看不到尖括号,即使我把它们放在引号中。

【问题讨论】:

  • 它们是位移位运算符,请阅读here 和更详细的here
  • 只是添加,>>> 右移意味着将位数除以提高到 2 的幂的位数,

标签: java syntax


【解决方案1】:

它们是按位移位运算符,它们通过移位指定的位数进行操作。这里是tutorial,了解如何使用它们。

有符号左移运算符“

有符号右移运算符“>>”将位模式移到 对。

无符号右移运算符“>>>”将零移到 最左边的位置

【讨论】:

  • 代码也使用&gt;&gt;&gt;,这是一个无符号右移。
  • @TheZ:谢谢!用相关文字更新了答案。
【解决方案2】:

直接来自ORACLE DOC

有符号左移运算符“>”将位模式移到 对。位模式由左侧操作数给出,而 右手操作数移位的位置数。未签名的 右移运算符“>>>”将零移到最左边的位置, 而“>>”之后最左边的位置取决于符号扩展。

【讨论】:

    【解决方案3】:

    按位移位。请在此处查看官方文档:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 2015-06-08
      • 1970-01-01
      • 2012-04-01
      • 2018-12-06
      相关资源
      最近更新 更多