2012-10-23 64 views
6

有人能解釋爲什麼這兩部分Java代碼的行爲不同?第一個正確計數位數,但第二個只顯示1或0非零數字。我不明白髮生了什麼事。在Java中使用按位&運算符和+給出不一致的結果

public static void printNumUnitBits(int n){ 
    int num=0; 
    for(int i=0;i<32;i++){ 
     int x=n&1; 
     num=num+x; 
     n=n>>>1; 
     } 
    System.out.println("Number of one bits:"+num); 
    } 

    public static void printNumUnitBits(int n){ 
    int num=0; 
    for(int i=0;i<32;i++){ 
     num=num+n&1; 
     n=n>>>1; 
     } 
    System.out.println("Number of one bits:"+num); 
    } 

回答

5

在Java中,+具有higher precedence&。您的表達num+n&1將添加numn,然後取最低位。

要解決此問題,請嘗試在第二個示例num=num+(n&1);中作出陳述。

+0

哦..我現在明白了。大!非常感謝:) – Shimano

1

運算符優先級。 +&具有更高的優先級。您的代碼

num=num+n&1 

會喜歡

num=(num+n)&1 

查找被執行here

1

Operators precedence

int x=n&1; 
num=num+x; 

num=num+n&1; 

是不同的。
你正在做一個不同時刻的按位&。

相關問題