c++ - 用于计算位或找到最右边|最左边的位的高效按位运算

标签 c++ c binary bit-manipulation bit

给定一个无符号整数,我必须执行以下操作:

  1. 计算设置为1的位数
  2. 找到最左边1位的索引
  3. 找到最右1位的索引

(操作不应依赖于体系结构)。

我已经使用位移位完成了此操作,但我必须遍历几乎所有位(es.32)。 例如,计算 1:

unsigned int number= ...;
while(number != 0){
    if ((number & 0x01) != 0)
        ++count;
    number >>=1;
}

其他操作类似。

所以我的问题是:有没有更快的方法来做到这一点?

最佳答案

如果您想要最快的方式,您将需要使用不可移植的方法。

Windows/MSVC:

海湾合作委员会:

这些通常直接映射到 native 硬件指令。所以它不会比这些更快。

但由于它们没有 C/C++ 功能,因此只能通过编译器内部函数访问它们。

关于c++ - 用于计算位或找到最右边|最左边的位的高效按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9093323/

相关文章:

c++ - 将标量 + std::array + std::tuple 转换为大元组

c++ - 使用命名空间制作全局函数,但出现多次定义的符号错误

c - 每个打印语句会执行多少次?

c - 无法理解这段代码的工作原理 "binaryString[i] = ((number & 1) + ' 0')"

用 1 和 2 求整数的二进制的算法

c++ - ArticxEngine.exe : 0xC0000005: Access violation writing location 0x00000004 中 0x777122D2 (ntdll.dll) 的未处理异常

c++ - qdebug 流和 qtextedit 的未知输出

c - uv_write 实际上是异步的吗?

c - 为什么这段代码中没有违反序列点规则?

python - 用python解析二进制格式