c - 这个按位运算如何检查 2 的幂?

标签 c math bit-manipulation

我正在看一些应该很简单的代码——但我的数学在这里让我很失败。

这是一个条件,它使用以下条件检查数字是否为 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/

相关文章:

c++ - 如何在具有 8 位成员的队列中前进并将对组合成 16 位值

c++ - 编码比赛 : How to store large numbers and find its all combination modulus P

javascript - 为什么原子操作没有逻辑否定?

c - 奇怪的右移位不一致

c - 在两个程序之间使用共享内存

c - 链接描述文件有什么问题

c - 对 stricmp 的 undefined reference

c# - 质数公式

vb.net - 确定频率变化的关键点

Erlang 位语法理解