2013-07-31 10 views
5

Ho appena letto il codice seguente:AND bit a bit in java con operatore "&"

byte[] bts = {8, 0, 0, 0}; 
if ((bts[i] & 0x01) == 0x01) 

Questo fa la stessa cosa di

if (bts[i] == 0x01) 

Se no, qual è la differenza tra loro?

E qual è il primo modo di provare a fare qui?

risposta

13

No, non è così.

if(bts[i] == 0x01) 
.210

significa che se BTS [i] è uguale a 1.

if((bts[i] & 0x01) == 0x01) 

significa che se il bit meno significativo del BTS [i] è uguale a 1.

Esempio.

bts[i] = 9 //1001 in binary 

if(bts[i] == 0x01) //false 

if((bts[i] & 0x01) == 0x01) //true 
+0

@Johnny: E.g., ** tutti i numeri dispari ** corrispondono al test '& 0x01', ma solo' 0x01' corrisponde al test '== 0x01'. –

+0

Sembra che tutti i numeri dispari torneranno veri qui. –

+1

@JohnnyChen: sento un eco? ;-) –

2

(0x1001 & 0x01) == 0x01, ma

0x1001 != 0x01 
2

No, non lo fa, il primo sarà solo controllare l'ultimo bit - se è 1, ritornerà vero a prescindere dagli altri

La seconda. uno restituirà true se solo l'ultimo bit è 1.

1

No, non è la stessa cosa. 0x01 è solo 1. Ora,

if (bts[i] == 0x01) 

controlli se bts[i] è pari a 1.

if ((bts[i] & 0x01) == 0x01) 

Controlla se l'ultimo (meno significativo) bit di bts[i] è uguale a 1. Nel sistema binario, tutti i numeri dispari hanno l'ultimo bit uguale a 1. Quindi, if ((bts[i] & 0x01) == 0x01) sta sostanzialmente controllando, se il numero in bts[i] è dispari. Potrebbe essere scritto come if (bts[i] % 2 == 1), anche.