6

これら 2 つの Java コードの動作が異なる理由を誰か説明してもらえますか? 最初のものはビット数を正しくカウントしますが、2番目のものはゼロ以外の数値に対して1または0を表示するだけです。何が起こっているのかわかりません。

    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);
    }
4

3 に答える 3

5

Java では、よりも優先順位+が高くなります。あなたの式は追加され、次に最下位ビットを取ります。&num+n&1numn

これを修正するには、2 番目の例のステートメントを作成してみてくださいnum=num+(n&1);

于 2012-10-23T08:12:15.567 に答える
1

演算子の優先順位。+より優先度が高い&。あなたのコード

num=num+n&1

のように実行されます

num=(num+n)&1

ここを見て

于 2012-10-23T08:12:58.800 に答える
1

演算子の優先順位

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

num=num+n&1;

異なっています。
あなたは別の瞬間にビット単位で & をやっています。

于 2012-10-23T08:14:59.933 に答える