【发布时间】:2022-01-27 23:06:01
【问题描述】:
假设我们试图从某个无符号变量中删除尾随零。
uint64_t a = ...
uint64_t last_bit = a & -a; // Two's complement trick: last_bit holds the trailing bit of a
a /= last_bit; // Removing all trailing zeroes from a.
我注意到手动计算位数和移位速度更快。 (开启优化的 MSVC 编译器)
uint64_t a = ...
uint64_t last_bit = a & -a;
size_t last_bit_index = _BitScanForward64( last_bit );
a >>= last_bit_index
假设编译器内在 _BitScanForward64 比任何替代方案都快,是否有任何进一步的快速技巧可以使这更快?
【问题讨论】:
-
你不能直接在
a上使用_BitScanForward64吗? -
可能是this?
标签: c++ performance optimization bit-manipulation