在Java中,“>>”符号代表什么意思?

49

我在查看一些代码时看到一行代码,它说的是(12>>1)-1)。我打印出该值,它的值为5。如果我将12更改为5,则该值为1。

">>"符号到底是做什么的?


是的,我刚刚在写二进制数12时注意到了这一点。感谢您的回复! - Bad Dub
1
在一个著名的网络搜索引擎上查找"java >> 运算符",第二个链接是:官方Java运算符教程 - T.J. Crowder
3
好的,我会尽力进行翻译。以下是需要翻译的内容:@fge No, it's a right shift。 @fge表示这不是左移而是右移。 - pathfinderelite
@pathfinderelite 嗯,是的,脑抽了。 - fge
6个回答

58

>> 是有符号右移位运算符。它将一个比特模式向右移动。左操作数给定比特模式,右操作数指定要移位的数量。

当向右移动两个比特时,会删除最低的两个比特。

假设,x = 00111011

那么当你执行 x >> 2 时,结果为 x = 00001110

这本质上与将值除以 4 或两次除以 2 并丢弃小数部分相同。

所以,下面的代码将得出 4

```(7 >> 1) >> 1```
byte val = 100;
val = (byte) (val >> 2);
System.out.println(val);

解释您的例子:

  • 12的二进制表示为:1100
  • 12 >> 1相当于0110,这是十进制中的6
  • 因此(12 >> 1)- 1等同于6-1,即5

8
也许你的意思是结果会是25?100除以4不等于4;) - Eugene Troyanskii

36

12用二进制表示为1100。将其右移一位(>>是按位右移操作符)得到


1100 -> 0110 

最终结果是6。

因此,我们得到:

6 - 1 = 5

4
请参见位运算和位移操作符
Java编程语言还提供了对整数类型执行位运算和位移操作的运算符。有符号左移运算符<<将位模式向左移动,有符号右移运算符>>将位模式向右移动。位模式由左操作数给出,要移位的位置数由右操作数给出。无符号右移运算符>>>在最左边的位置上移入零,而>>之后最左边的位置取决于符号扩展。
(12 >> 1) - 1)         

>> 是二进制右移操作符,将二进制数 12(1100) 向右移动 1 位。
12 >> 1 == 6(110)

6 - 1 == 5


2

这是一个位移运算符。请参见此处


2

>> 执行算术右移操作。

例如:

12 >> 1 = 6
-12 >> 1 = -6

1

二进制右移运算符。左操作数的值向右移动右操作数指定的位数。例如,A >> 2 将给出15,即二进制中的1111。

更多信息:按位与和位移运算符


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接