位移操作中出现意外结果

4
我觉得答案很简单,但我还是没明白它。
byte a=5;
int b=10;
int c=a>>2+b>>2;
System.out.print(c);

由于 a>>2 的结果为 1b>>2 的结果为 2,因此我期望输出结果为 3,但实际输出为 0。这是什么原因?


1
加法比位移运算符具有更高的优先级。 - blgt
1
如果您对执行顺序有疑问,您可以随时使用括号。 - Eypros
1个回答

7

这是由于运算符优先级的原因。

你所做的与以下操作相同:

int c=(a>>(2+b))>>2;

您希望的是这个:

您需要这个:

int c=(a>>2)+(b>>2);

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