2015-01-05 70 views

回答

5

以Java的operator precedence(尤其是+>>更高的优先级),并结合规则考虑,表达的是相当于

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

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

这是零。

如果您需要在转移前除了要发生,parenthesise他们:

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

感谢您的快速重播......它的罚款。 –

2

因为它就像写(Operator Precedence)

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

这就像写:

(10 >> 7) >> 2 

哪个是0,为什么?

想想10的二进制表示,假设8位:

00001010 

现在,向右移位7它,你会右移2得到0。Shift键,你仍然会得到0 。

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 
相关问题