如何使用按位运算符计算机记录基数2?

时间:2013-02-08 06:57:59

标签: c bit-manipulation operator-keyword logarithm

我需要计算C中数字的日志基数2,但我不能使用数学库。答案不需要精确,只需要最接近的int。我已经考虑过了,我知道我可以使用while循环并继续将数字除以2,直到它为< 2,并保持迭代的计数,但这是否可能使用按位运算符?

2 个答案:

答案 0 :(得分:12)

abamert已经回答了,但为了更具体一点,这就是你编写代码的方法:

Log2(x) = result
while (x >>= 1) result++;   

答案 1 :(得分:8)

如果将shifting计为按位运算符,这很容易。

你已经知道如何通过连续2分区来完成它。

对于C中的任何无符号整数,

x >> 1x / 2相同。

如果你需要加快速度,你可以一次“分而治之” - 换档,比如4位,直到你达到0,然后再回头查看最后4位。这意味着最多16个班次和19个比较,而不是每个63个。无论它在现代CPU上实际上是否更快,我都不能说没有测试。你可以更进一步,首先做16组,然后是4组,然后是1组。可能在这里没用,但如果你有一些1024位整数,那么可能值得考虑。