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
广告