这是我需要做的:
int lg(int v)
{
int r = 0;
while (v >>= 1) // unroll for more speed...
{
r++;
}
}
我在以下位置找到了上述解决方案:http: //graphics.stanford.edu/~seander/bithacks.html#IntegerLog
这行得通,但我需要在没有大于 0xFF (255) 的循环、控制结构或常量的情况下执行此操作,事实证明这对我来说很难找到。我一直在尝试使用表格中的条件来解决问题
( x ? y : z ) = (((~(!!x) + 1)) & y) | ((~(~(!!x) + 1)) & z)
但我无法让它工作。谢谢你的时间。