位運算的應用 判斷乙個數是不是2的整數次方

2021-09-14 05:23:46 字數 588 閱讀 1213

題目描述:判斷乙個數是不是2的整數次方,只能用一條語句。

這個題其實不用位運算的方法也可以,用log2取整也可以。下面給出位運算的做法。

2的二進位制為10;

4的二進位制為100;

8的二進位制為1000;

。。。。。。

2^n的二進位制為1000…0000;

發現2的整數次方的二進位制中均只有乙個1.

#include

using namespace std;

bool func

(int n)

if(count ==1)

return true;

return false;

}int

main()

return0;

}

**中的「(n-1)&n==0」可以判斷它的二進位制中只有乙個1;所以滿足題目需求,一條語句求解。具體的證明過程不給出,在我的另外一篇部落格求二進位制中1的個數中有具體解釋。

給出執行結果。

判斷乙個數是不是2的乘方

最簡的辦法 判斷乙個正整數 i 是不是2的乘方 只要看 i i 1 0 是否為true即可。原理 凡是2的乘方的正整數,其二進位制數必然是以1為首位,其它位都是0。這時候如果給它減1,在位數相同的情況下 就會變成首位是0,其它位全部是1的結果,然後用 位與 運算,得到的結果是0,就說明這個正整數是2...

判斷乙個數是不是2的冪

將2的冪次方寫成二進位制形式後,很容易就會發現有乙個特點 二進位制中只有乙個1,並且1後面跟了n個0 因此問題可以轉化為判斷1後面是否跟了n個0就可以了。如果將這個數減去1後會發現,僅有的那個1會變為0,而原來的那n個0會變為1 因此將原來的數與去減去1後的數字進行與運算後會發現為零。最快速的方法 ...

判斷乙個數是不是2的冪

我們經常會遇到這樣乙個問題,就是判斷某個資料是否為2的n 次方 1,2,4,8,16.例如如果使用者輸入的不是 2 n,則要求使用者重新輸入。為了說明這種判斷演算法,我首先構造乙個測試程式,如下 include include int main end clock printf the total ...