2012-10-23 3 views
6

誰かがこの2つのJavaコードが異なる動作をする理由を説明してもらえますか?最初のビットは正しくビット数をカウントしますが、2番目のビットはゼロ以外の数の場合は1または0を表示します。私は何が起こっているのか分からない。 JavaではJavaでbitwise&operatorと+を使用すると一貫性のない結果が返る

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

+&よりhigher precedenceを持っています。あなたの式num+n&1は、numnを追加し、次に最も低いビットを取ります。

これを修正するには、2番目の例の文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; 

が異なります。
ビット単位で&を実行しています。

関連する問題