[英]How to find the kth bit of a number in c?
因此,我为此找到的第一个解决方案是:
(n & ( 1 << k )) >> k
但是我不知道这将如何工作,因为如果我有数字11100,并且想要第二个位,那么这个数字&(1 << 2)将给我100。现在,如果我执行此数字>> 2,我会得到1,这是不正确的,因为数字的第二位是0。不是每个位移仅将k-1位移吗?
我们有n号。 可能是1234,即二进制的10011010010。
(1 << k)
将数字1中的位左移k次。 结果是,除第k个位置(第1个位置已移动)外,所有数字均为0。
&
运算符是按位与。 因此,除第k个数字外,所有其他位置上的每个n都将使我们的原始n个数字中的0变为0。 原始数字中的第k位为0-1 = 1,1&1 = 1。
不得已时,将结果k-向右移动会使该位出现在数字的开头,因此我们根据第k个位置取1或0。
计算示例:
(10011010010 & ( 1 << 4)) >> 4
(10011010010 & 00000010000) >> 4
00000010000 >> 4
00000000001
所以第四位是1。
在这里,您可以利用逻辑:
#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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.