题目描述:用一条语句判断一个整数是不是2的整数次方。
题目分析:2的整数次方的特点就是二进制中有一个1,思路就是这个数与比它小一个数相与,如果为0,则证明为真,特例有:1和负数需要处理。
代码如下:
#include<iostream>
using namespace std;
//判断一个数是不是2的整数次数
bool IsTwo(int num)
{
if(num == 1) //处理1
{
return false;
}
if(num < 0) //处理负数
{
num = abs(num);
}
int n = num & (num-1);
if(n)
{
return false;
}
return true;
}
int main()
{
cout<<IsTwo(1)<<endl;
cout<<IsTwo(2)<<endl;
cout<<IsTwo(3)<<endl;
cout<<IsTwo(6)<<endl;
cout<<IsTwo(8)<<endl;
cout<<IsTwo(-4)<<endl;
return 0;
}