因此,我为此找到的第一个解决方案是这样做的:
(n & ( 1 << k )) >> k
但是我不知道这将如何工作,因为如果我有数字11100,并且我想要第二位,那么这个数字&(1 << 2)将给我100。现在,如果我执行此数字> > 2,我将得到1,这是不正确的,因为数字的第二位是0。难道每个位移位不只位移k-1吗?
答案 0 :(得分:1)
我们有n号。可能是1234,即二进制的10011010010。
(1 << k)
将数字1中的位左移k次。结果,我们得到的数字除第k个位置(第1个移动到第k个位置)外全为0。
&
运算符按位与。因此,除第k个数字外,所有其他位置上的每个0都会使我们在原始n个数字中的数字为0。原始数字中的第k位为0-1和1&1 = 1。
不得已,将结果k-向右移动会使该位出现在数字的开头,因此我们根据第k个位置取1或0。
计算示例:
(10011010010 & ( 1 << 4)) >> 4
(10011010010 & 00000010000) >> 4
00000010000 >> 4
00000000001
第4位为1。
答案 1 :(得分:0)
在这里,利用逻辑:
#include <stdio.h>
unsigned get_bit(unsigned k, int number) {
return ((unsigned)number & (1U << k)) > 0;
}
int main(){
printf("b00001010 and k = 0, result = %u\n", get_bit(0, 0xA));
printf("b00001010 and k = 0, result = %u\n", get_bit(1, 0xA));
printf("b00001010 and k = 0, result = %u\n", get_bit(2, 0xA));
printf("b00001010 and k = 0, result = %u\n", get_bit(3, 0xA));
printf("b00001010 and k = 0, result = %u\n", get_bit(4, 0xA));
return 0;
}