C 语言中求一个数是否是 2 的幂


假设我们有一个数 n,我们要检查这个数是否为 2 的幂。如果 n = 16,则输出将为真,如果 n = 12,则输出将为假。

为了解决这个问题,我们将使用逻辑运算。如果我们查看 2 的幂的形式,则该数的二进制表示中的最高有效位为 1,所有其它位为 0。因此,如果我们执行 [n AND (n – 1)],如果 n 为 2 的幂,这将返回 0。如果我们查看 n = 16 = 10000(二进制),(n – 1) = 15 = 01111(二进制),则 10000 AND 01111 = 00000 = 0

C 语言示例

我们来看一下以下实现,以便更好地理解 -

#include <stdio.h>
#include <math.h>
#define MAX 20
bool isPowerOfTwo(int n){
   return(n>0 && !(n & (n-1)));
}
int main() {
   printf("%s
", isPowerOfTwo(16) ? "true" : "false");    printf("%s
", isPowerOfTwo(12) ? "true" : "false");    printf("%s
", isPowerOfTwo(1) ? "true" : "false");    printf("%s
", isPowerOfTwo(32) ? "true" : "false");    printf("
"); }

输入

16
12
1
32

输出

true
false
true
true

更新日期: 2020 年 4 月 28 日

614 次观看

启动你的 职业

通过完成课程获得认证

开始
广告