2013-01-03 75 views

Trả lời

56

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 
+1

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

+0

@ user1921187 Vâng, đúng vậy. 'getBit (0b10001, 0)' sẽ trả về '1' và' getBit (0b10001, 1) 'sẽ trả về' 0'. – Doorknob

+0

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

7
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.

4

Nếu bit quan trọng thấp nhất là bit số 0:

return (n>>k)&1; 
0

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; 
1

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

Các vấn đề liên quan