题目描述:判断一个数是不是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的整数次方

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-22
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-01-01
  • 2021-07-23
  • 2021-09-13
  • 2021-12-18
  • 2021-07-29
相关资源
相似解决方案