【发布时间】:2014-03-26 17:52:52
【问题描述】:
我想尽快执行以下操作
x / LSB(x)
其中x 是编译时未知的整数值,LSB(x) = x & -x。
(或者,该操作相当于 even 除以 2 合理 可移植的解决方案(没有编译器内在函数/内置函数像 GCC 的 __builtin_clz 或类似的)。
我担心的是下面的简单实现
x / (x & -x)
仍然会导致昂贵的除法,因为编译器可能无法意识到除法实际上相当于右移除数中尾随零的数量。
如果我的担忧是合理的,那么实施它的更有效方法是什么?
我希望有一个解决方案可以轻松扩展到 32 位、64 位、128 位等大小的整数类型...
【问题讨论】:
-
据我所知,您还不能真正做到这一点,除非使用一堆预处理器来选择正确的内在函数。 N3864 会有所帮助..
-
您是用 C 还是 C++ 编写代码?此外,编译器通常很擅长发现这些东西。
-
C++。我主要关心 GCC、clang 和 MSVC++。
-
偶数除法是什么意思?我看不出除以 2
-
偶数除法 = 除法无余数。
标签: c++ c performance integer bit-manipulation