算法 – 以前的幂2

有很多关于如何找到给定值的2的下一个权力的信息(参见参考文献),但是我找不到以前的权力两个.

到目前为止,我找到的唯一方法就是保持两张所有功能的桌子达到2 ^ 64,并进行简单的查找.

> Acius’ Snippets
> gamedev
> Bit Twiddling Hacks
> Stack Overflow

最佳答案
Hacker’s Delight,一个很好的无枝解决方案:

uint32_t flp2 (uint32_t x)
{
    x = x | (x >> 1);
    x = x | (x >> 2);
    x = x | (x >> 4);
    x = x | (x >> 8);
    x = x | (x >> 16);
    return x - (x >> 1);
}

这通常需要12条指令.如果您的CPU具有“计数前导零”指令,则可以更少地执行此操作.

转载注明原文:算法 – 以前的幂2 - 代码日志