假设 X 是一个无符号整数,我如何才能从 X 中提取第 5 位并返回 X 中 1 的位数。注意:这两个操作不相互依赖。
为了从 X 中提取第 5 位,我想使用 & 操作来做这样的事情:XXXX1X & 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/