【c++算法】《判斷一個數是否爲2的n次方》

判斷一個數是否爲2的n次方。

#include <iostream>
using namespace std;
bool is2N(int dest)
{
	if (dest & (dest - 1)) //核心代碼
		return false;
	else
		return true;
}

int main()
{
	if (is2N(4))
	{
		cout << "4是2的N次方" << endl;
	}
	else
	{
		cout << "4不是2的N次方" << endl;
	}
}

如上若不理解if (dest & (dest - 1)) //核心代碼;可以查看我另一篇博客:
c/c++的位運算符使用技巧

  • 若是2的n次方的數,它的反碼中最後一位必然不是1;
  • 同理2的n次方-1的數,必然是奇數,反碼最後一位必然爲1

判斷某個區間的數中爲2的n次方的數。

上面已經展示過了判斷一個數是否爲2的n次方的算法了,這裏我們來拓展一下,判斷自然數0~N中爲2的n次方的數字。

#include <iostream>
using namespace std;

void find2N(int dest)
{
	for (size_t i = 0; i < dest; i++)
	{
		if (i & (i - 1))
		{
			continue;
		}
		cout << i << endl;
	}
}

int main()
{
	find2N(100);
}

版權聲明:轉載標明出處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章