我需要计算在C中的数字的日志基数2,但我不能使用数学库。答案不需要是精确的,只需要最接近的int。我已经考虑过了,我知道我可以使用while循环,并将数字除以2直到它为< 2,并且保持迭代次数,但是这可能使用按位运算符吗?如何使用按位运算符计算日志库2?
5
A
回答
6
如果你把shifting算作一个按位运算符,这很容易。
你已经知道了如何通过连续除以2
x >> 1
做到这一点是一样的x/2
在C.
任何无符号整数,如果你需要,使这个速度,你可以做一个“分而治之” - 一次转换4位,直到你达到0,然后返回查看最后4位。这意味着最多16班和19比较,而不是每个63。无论现代CPU的速度如何,我都说不经过测试。你可以更进一步,先做16组,然后是4组,然后是1.这里可能没有用,但如果你有一些1024位整数,可能值得考虑。
10
已经通过abamert回答,但只是为了更具体,这是你将如何编写它:
Log2(x) = result
while (x >>= 1) result++;
相关问题
- 1. 如何使用Ruby的按位运算符来计算补码?
- 2. 如何计算按位运算返回
- 3. PostgreSQL如何使用按位运算符| =
- 4. 如何使用按位运算符
- 5. 如何使用按位运算符?
- 6. 计算日志基地2
- 7. 比较标志与按位运算符
- 8. 如何使用按位运算符实现模式2^n-1
- 9. 按位运算符
- 10. 按位运算符
- 11. 不使用算术运算或按位运算符的加法
- 12. 如何有效地计算楼层日志库2 ^(1/4)
- 13. 如何计算整数的Java中的日志库2?
- 14. 使用pari库实现按位运算
- 15. 使用按位运算符的模式
- 16. 在javascript中使用按位运算符
- 17. 实现sizeof运算符使用按位运算
- 18. 按位运算符如何工作?
- 19. JavaScript按位运算符如何工作?
- 20. 如何重载〜(按位不)运算符?
- 21. 使用按位运算
- 22. 如何在EL中使用按位移位运算符
- 23. 按位算术和运算符
- 24. 按位运算符左移
- 25. Javascript按位运算符
- 26. C++'>'按位运算符
- 27. 按位'&'运算符on uint
- 28. 按位运算符&逻辑
- 29. Haskell按位运算符Data.Bits
- 30. JavaScript和按位运算符
你算[移位](http://en.wikipedia.org/wiki/Bitwise_operation#Bit_shifts )作为一个按位运算符?如果是这样,答案是非常明显的。如果不是,那就更棘手了。 – abarnert
0_o为什么你不能使用数学库? – 2013-02-08 06:59:56
@JackManey:据推测这可能是家庭作业,也可能是自学教学。但没关系;他似乎已经付出了一些努力(他总是有一个工作解决方案),并且正在寻找暗示,看看是否有另一种方式去做,而不是要求我们为他做功课。 – abarnert