2013-07-31 43 views
5

Właśnie przeczytałem ten kod następujący:bitowe I w Javie z operatorem „&”

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

Czy to to samo co

if (bts[i] == 0x01) 

Jeśli nie, jaka jest różnica między nimi?

I jaki jest pierwszy sposób, aby spróbować tutaj?

Odpowiedz

13

nie, tak nie jest.

if(bts[i] == 0x01) 

oznacza, że ​​jeśli BTS [i] jest równa 1.

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

oznacza, że ​​najmniej znaczący bit BTS [i] jest równa 1.

przykładu.

bts[i] = 9 //1001 in binary 

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

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

@Johnny: E.g., ** wszystkie liczby nieparzyste ** pasują do testu '& 0x01', ale tylko' 0x01' pasuje do testu '== 0x01'. –

+0

Wygląda na to, że wszystkie liczby nieparzyste zwrócą tutaj true. –

+1

@JohnnyChen: Czy słyszę echo? ;-) –

2

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

0x1001 != 0x01 
2

Nie, to nie pierwsza sprawdzi tylko ostatni kawałek - czy to 1, powróci tak niezależnie od innych

Drugi. będzie jeden return true jeśli tylko ostatni bit jest 1.

1

Nie, to nie to samo. 0x01 to tylko 1. Teraz

if (bts[i] == 0x01) 

sprawdza czy bts[i] jest równa 1.

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

Sprawdza czy ostatnia (najmniej znaczący) bit bts[i] jest równa 1. W systemie binarnym wszystkie liczby nieparzyste mają ostatni bit równy 1. Tak więc, if ((bts[i] & 0x01) == 0x01) jest po prostu sprawdzanie, czy liczba w bts[i] jest nieparzysta. Można go również zapisać jako if (bts[i] % 2 == 1).