2013-01-03 25 views

cevap

56

kullanma bitsel operatörleri: (bit olarak)

int getBit(int n, int k) { 
    return (n >> k) & 1; 
} 

Açıklama:

n 
100010101011101010 (example) 
n >> 5 
000001000101010111 (all bits are moved over 5 spots, therefore 
&     the bit you want is at the end) 
000000000000000001 (0 means it will always be 0, 
=     1 means that it will keep the old value) 
1 
+1

isterseniz? – user1921187

+0

@ user1921187 Evet, öyle. 'getBit (0b10001, 0)' '1' döndürür ve' getBit (0b10001, 1) '' 0' döndürür. – Doorknob

+0

iyi, eğer getBit (n, 0) çalıştırsaydım, sağdan ikinci biti alırdım. Yani k = 0 aslında en az anlamlı bit alır, bu yüzden 0 bit. Yanlış bir şey mi görüyorum? – user1921187

7
return (n >> k) & 1; 

, n >> k az önemli pozisyona k-inci bit kaydırır ve & 1 maskeleri dışarı her şey.

4

en düşük anlamlı bit bit sayısı 0 ise:

return (n>>k)&1; 
0

Ayrıca modülünü kullanabilirsiniz bunun için özellik. Numaranız en düşük anlamlı bit bile sıfır ise, aksi halde (tek) birdir.

return (n>>k)%2; 
1

veya kullanım:

boolean getBit(int n, int k) { 
    return (((n >> k) & 1) == 1 ? true:false); 
} 

Buranın doğru 0 bit olarak en az önemli bit başlayarak bir boole değeri