怎么做<<或>>>在java中是什么意思

时间:2012-11-14 21:09:48

标签: java syntax

  

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

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

3 个答案:

答案 0 :(得分:36)

它们是按位移位运算符,它们通过移位指定的位数来运行。以下是关于如何使用它们的tutorial

  

签名左移运算符“&lt;&lt;”将位模式向左移动

     

签名的右移运算符“&gt;&gt;”将位模式转换为   右。

     

无符号右移运算符“&gt;&gt;&gt;”将零转换为   最左边的位置

答案 1 :(得分:6)

直接来自ORACLE DOC

  

签名左移运算符“&lt;&lt;”将位模式向左移动,   和签名的右移运算符“&gt;&gt;”将位模式转换为   对。位模式由左侧操作数和   由右手操作数移动的仓位数。未签名的   右移运算符“&gt;&gt;&gt;”将零移动到最左边的位置,   而“&gt;&gt;”之后的最左边位置取决于符号扩展。

答案 2 :(得分:2)

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