首先我们要熟悉,二的整数次幂的特点就是二进制数上只有一个位上是1,别的位全是0
方法一:二进制逐个位检验,对1计数,if判断1的个数为1,便输出(详细步骤可以参考上一篇,原理是一样的)
废话不多说,直接上码
#include<bitset>
#include<iostream>
using namespace std;
int main(){
int num,res;
cin>>num;//输入这个数
unsigned int un = num;
while (un)
res += un & 1, un >>= 1;
if(res==1)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
cout << "num1的三十二位2进制: " <<bitset<32>(num) << endl;
return 0;
}
结果如下:
方法二:我们知道2的n次方的二进制只有最高位是1,其余为0,减1后最高位向后借位为0,其余为1。因此将原来的数与减去1后的数字进行与运算后会发现为零。只需一句关键代码即可实现功能。
废话不多说,直接上码
#include<bitset>
#include<iostream>
using namespace std;
int main(){
int num;
while(cin>>num)
{
if((num&(num-1))==0) //此处注意运算符的优先级,“==”比“&”优先级高
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
cout << "num1的三十二位2进制: " <<bitset<32>(num) << endl;
}
}
结果如下:
有什么不足之处,希望大家不吝赐教