Tôi muốn lấy int làm đầu vào và trả về bit thứ k.Làm thế nào người ta có thể đọc một bit số nguyên bằng bit trong Java?
int getBit(int n, int k){
return kth bit in n;
}
Tôi làm như thế nào?
Tôi muốn lấy int làm đầu vào và trả về bit thứ k.Làm thế nào người ta có thể đọc một bit số nguyên bằng bit trong Java?
int getBit(int n, int k){
return kth bit in n;
}
Tôi làm như thế nào?
Sử dụng toán tử Bitwise:
int getBit(int n, int k) {
return (n >> k) & 1;
}
Giải thích (theo bit):
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;
Ở đây, n >> k
chuyển các bit -thứ k
vào vị trí quan trọng nhất, và & 1
mặt nạ ra mọi thứ khác.
Nếu bit quan trọng thấp nhất là bit số 0
:
return (n>>k)&1;
Bạn cũng có thể sử dụng các mô-đun tài sản cho việc này. Nếu số của bạn thậm chí là bit quan trọng thấp nhất là số không, nếu không (lẻ) là một.
return (n>>k)%2;
hoặc sử dụng:
boolean getBit(int n, int k) {
return (((n >> k) & 1) == 1 ? true:false);
}
nếu bạn muốn có một giá trị boolean
này được bắt đầu từ các bit quan trọng nhất là các bit 0 phải không? – user1921187
@ user1921187 Vâng, đúng vậy. 'getBit (0b10001, 0)' sẽ trả về '1' và' getBit (0b10001, 1) 'sẽ trả về' 0'. – Doorknob
tốt, nếu tôi chạy getBit (n, 0), tôi sẽ nhận bit thứ 2 từ bên phải. Vì vậy, k = 0 thực sự sẽ mang lại cho tôi ít bit quan trọng nhất, vì vậy nó là bit thứ 0. Tôi có thấy điều gì đó sai không? – user1921187