如何判斷乙個數是否為2的冪

2021-10-10 18:38:38 字數 983 閱讀 9088

給定乙個整數,寫乙個函式判斷該函式是否為2的冪。

例如

輸入 16

輸出 true

輸入:5

輸出:false

bool ispoweroftwo

(int n)

bool ispoweroftwo

(int n)

由二進位制原理可以知道,如果乙個數為2的冪,那麼這個數對應的二進位制應該只有乙個1,

演算法1:

在計算機系統中負數通常以補碼的方式儲存,

7的8位二進位制為

0000_0111

-7的8位二進位制為

1111_1001

7&(-7)的二進位制為 0000_0001

4的8位二進位制為

0000_0100

-4的8位二進位制為

1111_1100

4 &(-4)的二進位制位0000_0100

因此 x &(-x)將x的最右邊置為1,由於如果乙個數為2的冪,該數字對應的二進位制只有乙個1,因此可得

x&(-x) = x

該思路對應code2

演算法2:

依然從由於如果乙個數為2的冪,該數字對應的二進位制只有乙個1考慮,那麼可以得到

x&(x-1) = 0

例如4對應的二進位制為

0000_0100

4-1對應的二進位制為

0000_0011

4 & (4-1)==0

7對應的二進位制為

0000_0111

7-1對應的二進位制位

0000_0110

7 & (7-1) != 0

該思路對應code1

判斷乙個數是否為2的次方冪

給定乙個整數n,判斷它是否為2的次方冪。思路 2,4,8,16,32.都是2的n次冪 轉換為二進位制分別為 10 100 1000 10000 100000 這些數減1後與自身進行按位與,如果結果為0,表示這個數是2的n次冪 01 011 0111 01111 011111 10 01 0 100 ...

巧妙判斷乙個數是否為2的整數次冪

package main import fmt 如何判斷乙個數是否為2的整數次冪 思路1.暴力破解 從1開始乘以2,迴圈並和目標值比較,當大約目標值則終止,顯然此方法效率非常低下 思路2.把乘以2改為移位運算,提高一點效率,還是沒有解決演算法的根本問題 思路3.通過轉換成二進位制觀察,為2的整數次冪...

判斷乙個數是否為 4 的冪(也可以是 2 的冪)

首先判斷是否為 2 的冪,因為 4 的冪均是 2 的冪 2 的冪 num 1,2,4,8,16,32 換成 2 進製即 1,10,100,1000,10000,100000,明顯可以得出 num num 0 4 的冪 num 1,4,16,64,換成二進位制即 1,100,10000,1000000...