我在一些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没有这样的东西。
另外,我尝试使用谷歌搜索,但由于某种原因谷歌似乎没有看到尖括号,即使我把它们放在引号中。
答案 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)