2012-10-23 15 views
6

Könnte jemand bitte erklären, warum sich diese beiden Java-Codes anders verhalten? Der erste zählt korrekt die Anzahl der Bits, aber der zweite zeigt nur 1 oder 0 für Zahlen ungleich Null an. Ich verstehe nicht was passiert.Verwendung von bitweisem & operator und + in Java mit inkonsistenten Ergebnissen

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

Antwort

5

In Java + hat higher precedence als &. Ihr Ausdruck num+n&1 wird num und n hinzufügen und dann das niedrigste Bit nehmen.

Um dies zu beheben, versuchen Sie, die Anweisung im zweiten Beispiel num=num+(n&1);.

+0

Oh..ich verstehe jetzt. groß! Vielen Dank :) – Shimano

1

Operator Vorrang. + hat höhere Priorität als &. Ihr Code

num=num+n&1 

Wird wie

num=(num+n)&1 

Blick here

1

Operators precedence

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

und

num=num+n&1; 
ausgeführt werden

sind unterschiedlich.
Sie tun die bitweise & in einem anderen Moment.

Verwandte Themen