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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP