2015-01-05 73 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 
相關問題