我正在看一些应该很简单的代码——但我的数学在这里让我很失败。
这是一个条件,它使用以下条件检查数字是否为 2 的幂:
if((num != 1) && (num & (num - 1))) { /* make num pow of 2 */ }
我的问题是,如何在 num 和 num - 1 之间使用按位与来确定一个数是否是 2 的幂?
最佳答案
任何 2 减 1 的幂都是 1:(2 N - 1 = 111....b)
2 = 2^1. 2-1 = 1 (1b)
4 = 2^2. 4-1 = 3 (11b)
8 = 2^3. 8-1 = 7 (111b)
以8为例。 1000 & 0111 = 0000
因此该表达式测试一个数字是否不是 2 的幂。
关于c - 这个按位运算如何检查 2 的幂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053582/