2013-01-03 11 views

Odpowiedz

56

pomocą operatorów bitowe:

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

Wyjaśnienie (w bitach):

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

to jest począwszy od najmniej znaczącego bitu jako 0th kawałka prawej? – user1921187

+0

@ user1921187 Tak, jest. 'getBit (0b10001, 0)' zwróci '1', a' getBit (0b10001, 1) 'zwróci' 0'. – Doorknob

+0

cóż, jeśli uruchomiłem getBit (n, 0), otrzymam drugi bit od prawej strony. Więc k = 0 faktycznie dałoby mi najmniej znaczący bit, więc jest to 0. bit. Czy widzę coś nie tak? – user1921187

7
return (n >> k) & 1; 

Tutaj n >> k przesuwa k -tego bitu do najmniej znaczącej pozycji i & 1 maskuje się wszystkiego innego.

4

Jeśli najniższy znaczący bit jest nieco liczba 0:

return (n>>k)&1; 
0

Można również użyć modułu własność dla tego. Jeśli twoja liczba jest nawet najmniej znaczącym bitem wynosi zero, w przeciwnym razie (nieparzysty) jest jeden.

return (n>>k)%2; 
1

lub zastosowanie:

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

jeśli chcesz wartość logiczną

Powiązane problemy