位运算的应用----判断一个数是不是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的个数中有具体解释。
给出运行结果。
位运算的应用----判断一个数是不是2的整数次方