判斷一個數是否爲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);
}
版權聲明:轉載標明出處