Chciałbym wziąć int jako dane wejściowe i zwrócić k-kt.Jak można odczytać liczbę całkowitą bit po bicie w Javie?
int getBit(int n, int k){
return kth bit in n;
}
Jak to zrobić?
Chciałbym wziąć int jako dane wejściowe i zwrócić k-kt.Jak można odczytać liczbę całkowitą bit po bicie w Javie?
int getBit(int n, int k){
return kth bit in n;
}
Jak to zrobić?
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
return (n >> k) & 1;
Tutaj n >> k
przesuwa k
-tego bitu do najmniej znaczącej pozycji i & 1
maskuje się wszystkiego innego.
Jeśli najniższy znaczący bit jest nieco liczba 0
:
return (n>>k)&1;
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;
lub zastosowanie:
boolean getBit(int n, int k) {
return (((n >> k) & 1) == 1 ? true:false);
}
jeśli chcesz wartość logiczną
to jest począwszy od najmniej znaczącego bitu jako 0th kawałka prawej? – user1921187
@ user1921187 Tak, jest. 'getBit (0b10001, 0)' zwróci '1', a' getBit (0b10001, 1) 'zwróci' 0'. – Doorknob
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