判断是否是2的n次方
转化为二进制进行处理
假设一个数是2的n次幂,则这个数二进制表示中有且仅有一个1
因此,可以考虑使用位运算,将其的二进制表示出来
再判断二进制中1的个数是否为1,若个数是1则是2的n次幂
第一种方法
#include <stdio.h>
int main()
{
int n = 1;
printf("请输入一个数:");
scanf("%d", &n);
int count = 0;//定义变量统计n的二进制中1的个数
while (n)
{
if(n&1)//判断n的二进制尾数是否唯一
count++;
n = n >> 1;//将n的二进制向左移一位
}
if (count == 1)
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
第二种方法
这种方法较第一种好
利用n&(n-1)是否为0进行判断
例如 8
00000000000000000000000000001000——8
00000000000000000000000000000111——7
00000000000000000000000000000000——8&7(为0)
#include <stdio.h>
int main()
{
int n = 1;
printf("请输入一个数:");
scanf("%d", &n);
if ((n&(n - 1)) == 0)
printf("yes\n");
else
printf("no\n");
return 0;
}