我想尽快执行以下操作
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/