45

我想将一个 int 作为输入,并返回第 k 位。

int getBit(int n, int k){
    return kth bit in n;
}

我该怎么做?

4

5 回答 5

104

使用位运算符:

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

说明(位):

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
于 2013-01-03T19:27:35.107 回答
12
return (n >> k) & 1;

在这里,n >> kk第 - 位移动到最低有效位置,并& 1屏蔽其他所有内容。

于 2013-01-03T19:27:26.357 回答
6

如果最低有效位是位数0

return (n>>k)&1;
于 2013-01-03T19:27:52.300 回答
3

或使用:

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

如果你想要一个布尔值

于 2017-08-18T18:12:09.037 回答
2

您也可以为此使用模块属性。如果您的数字是偶数,最低有效位为零,否则(奇数)为一。

return (n>>k)%2;
于 2017-07-05T22:03:12.837 回答