c++ - C/C++ 中设置的最低有效位的高效除法

标签 c++ c performance integer bit-manipulation

我想尽快执行以下操作

x / LSB(x)  

其中 x 是编译时未知的整数值,LSB(x) = x & -x。 (或者,该操作等效于 even 除以 2 <= x 的最高次幂。)我正在寻找一个合理可移植的解决方案(没有编译器内在函数/内置函数像 GCC 的 __builtin_clz 或类似的)。

我担心的是下面的简单实现

x / (x & -x)

仍然会导致昂贵的除法,因为编译器可能无法意识到除法实际上等同于右移除数中尾随零的数量。

如果我的担忧是合理的,那么更有效的实现方式是什么?

我希望有一个解决方案可以轻松扩展到 32 位、64 位、128 位等整数类型,...

最佳答案

怎么样

x >>= ffs(x)-1;

ffs 函数符合 4.3BSD,POSIX.1-2001。

如果 x 为 0,则无效。

关于c++ - C/C++ 中设置的最低有效位的高效除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22669212/

相关文章:

C++:unique_ptr 未正确初始化

c++ - 如何在 C++ 中将结构体初始化为 0

c++ - 读取和打印文件中的值

c++ - 如何使用 C++ 读取文件并打印到控制台而不使用变量?

c - C 中的外部结构

c - c中移动数组元素

c - Linux Fork 进程终止

linux - 测量系统调用的速度

performance - 将数据加载到组合框中很慢

python - 在 python 中进行 mysql 查询的更快方法