c - 位操作(从 X 中提取第 5 位并返回 X 中 1 位的数量)

标签 c bit-manipulation

假设 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;
}

工作原理:

  1. 初始化计数为0
  2. 从 MSB(最高有效位)开始[这是当前位]
  3. 加计数当前位的结果&1
    • 1 如果该位已设置
    • 0 如果该位未设置
  4. 将 X 向右移动 1 位,因此当前位现在是下一个 MSB
  5. 重复第 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/

相关文章:

C TCP Server 关闭前不发送数据

c - 如何避免 linux 设备驱动程序中的 copy_from_user 和 copy_to_user

用掩码只改变一些位

java - 通过 0 位操作清除 i 中的位

c - 为什么变量的地址在传递函数后会改变

检查正在运行的程序中的内存泄漏

c - 将数组传递给函数,将数组的每个值乘以 10

Python 位操作

ruby - 针对 Ruby 优化的位交错

php - MySQL 将不正确的记录返回给按位 SELECT