java中的<<或>>>是什么意思?

2022-09-01 12:54:30

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

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


答案 1

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

已签名的左移运算符“<<”向左移动位模式

签名的右移位运算符“>>”向右移动位模式。

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


答案 2

直接来自 ORACLE DOC

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