为什么10>> 2 + 5>> 2评估为零?

时间:2015-01-05 11:56:33

标签: java operators

请考虑以下代码:

int a=10, b=5;
int c=a>>2+b>>2;
System.out.println(c);

运行时,(令人惊讶的)输出为0.

为什么会这样?

3 个答案:

答案 0 :(得分:5)

考虑到Java operator precedence(特别是+的优先级高于>>)和关联性规则,表达式等同于

(a >> (2 + b)) >> 2

(10 >> (2 + 5)) >> 2

为零。

如果您需要在添加之前进行转换,请将它们括起来:

(a >> 2) + (b >> 2)

答案 1 :(得分:2)

因为它就像写(Operator Precedence)

(a >> (2 + 5)) >> 2

这就像写作:

(10 >> 7) >> 2

哪个是0.为什么?

考虑10的二进制表示,假设为8位:

00001010

现在,将它向右移动7,你就会得到0.将它向右移动2,你仍然会得到0。

答案 2 :(得分:0)

运营商优先权!

如果你的代码可以用不同的方式解释,那么几乎肯定会有一天。始终使用括号 - 永远不要依赖运算符优先级。

    int a = 10, b = 5;

    int c = a >> 2 + b >> 2;
    System.out.println(c);
    int d = (a >> 2) + (b >> 2);
    System.out.println(d);
    int e = ((a >> 2) + b) >> 2;
    System.out.println(e);
    int f = a >> (2 + b) >> 2;
    System.out.println(f);

打印

0
3
1
0
相关问题