位运算的应用----判断一个数是不是2的整数次方
题目描述:判断一个数是不是2的整数次方,只能用一条语句。
这个题其实不用位运算的方法也可以,用log2取整也可以。下面给出位运算的做法。
2的二进制为10;
4的二进制为100;
8的二进制为1000;
。。。。。。
2^n的二进制为1000…0000;
发现2的整数次方的二进制中均只有一个1.
#include <iostream>
using namespace std;
bool func(int n)
{
int count = 0;
while (n!=0)
{
n = (n - 1)&n;
count++;
}
if (count == 1)
return true;
return false;
}
int main()
{
std::cout << "Hello World!\n";
int n = 0;
while (cin >> n)
{
if(((n-1)&n)==0)
cout << n << "是2的整数次方" << endl;
else
cout << n << "不是2的整数次方" << endl;
/*if (func(n))
cout << n << "是2的整数次方" << endl;
else
cout << n << "不是2的整数次方" << endl;
*/
}
return 0;
}
代码中的“(n-1)&n==0”可以判断它的二进制中只有一个1;所以满足题目需求,一条语句求解。具体的证明过程不给出,在我的另外一篇博客求二进制中1的个数中有具体解释。
给出运行结果。