24

可能重复:
在 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 没有这样的东西。

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

4

3 回答 3

41

它们是按位移位运算符,它们通过移位指定的位数来操作。这是有关如何使用它们的教程。

带符号的左移运算符“<<”将位模式向左移动

带符号的右移运算符“>>”将位模式向右移动。

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

于 2012-11-14T21:10:19.113 回答
6

直接来自ORACLE 文档

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

于 2012-11-14T21:10:43.100 回答
3

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

于 2012-11-14T21:11:59.910 回答