2012-10-23 4 views
6

Qualcuno potrebbe spiegare perché questi due codici Java si comportano in modo diverso? Il primo conteggia correttamente il numero di bit ma il secondo visualizza solo 1 o 0 per i numeri diversi da zero. Non capisco cosa sta succedendo.Utilizzo bitwise e operatore e + in Java per risultati incoerenti

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

risposta

5

In Java, + ha higher precedence di &. La tua espressione num+n&1 aggiungerà num e n e quindi prenderà il bit più basso.

Per risolvere questo problema, provare a rendere l'istruzione nel secondo esempio num=num+(n&1);.

+0

Oh, capisco ora. grande! Grazie mille :) – Shimano

1

Precisione dell'operatore. + ha priorità più alta di &. Il tuo codice

num=num+n&1 

sarà eseguito come

num=(num+n)&1 

sguardo here

1

Operators precedence

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

e

num=num+n&1; 

sono diversi.
Stai eseguendo il bit per bit & in un altro momento.