2012-10-23 10 views
6

Czy ktoś mógłby wyjaśnić, dlaczego te dwa kody Java zachowują się inaczej? Pierwszy poprawnie liczy liczbę bitów, ale drugi wyświetla 1 lub 0 dla liczb niezerowych. Nie rozumiem co się dzieje.Używanie bitowego i operatora oraz + w Javie dającego niespójne wyniki

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

Odpowiedz

5

W Javie + ma higher precedence niż &. Twoje wyrażenie num+n&1 doda num i n, a następnie podejmie najmniejszy bit.

Aby rozwiązać ten problem, spróbuj wprowadzić instrukcję w drugim przykładzie: num=num+(n&1);.

+0

Oh .. Teraz rozumiem. wspaniały! Dzięki za dużo :) – Shimano

1

Pierwszeństwo operatora. + ma wyższy priorytet niż &. Kod

num=num+n&1 

będą realizowane jak

num=(num+n)&1 

Look here