假设X是一个无符号整数,我如何从X中提取第5位并返回X中1位的数目。注意:这两个操作互不依赖。
为了从X中提取第5位,我想使用&operation来执行如下操作:xxx1x&000010
我不太确定如何返回X中1位的数目。
谢谢!
最佳答案
计算1位的个数相对简单;您对数字的所有位进行迭代,并将设置的位数添加到某个累加器中:
unsigned int X;
unsigned int count;
for (count = 0; X; X >>= 1) {
count += X & 1;
}
工作原理:
将计数初始化为0
从MSB(最高有效位)开始[这是当前位]
相加以计算当前位的结果&1
如果设置了位,则为1
如果未设置位,则为0
将X右移1位,使当前位现在是下一个MSB
重复步骤3
提取第5位也很简单,只需将数字X右移5,然后用1计算逻辑和:
unsigned int fifthBit (unsigned int X) {
return (X >> 5) & 1;
}
关于c - 位操作(从X提取第5位,并在X中返回1位的数目),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22241040/