如何判斷乙個數n是否是2的k次方?

2021-09-26 09:45:48 字數 586 閱讀 2400

問題描述:如何判斷乙個數 n 是否是 2 的 k 次方?注意:不用求 k 是多少,只需要判斷,請編寫函式實現。

首先研究一下 2 的 k 次方的資料的特徵:

(0001)b = 2^0 = 1,(0010)b = 2^1 = 2,(0100)b = 2^2 = 4。以此得出:2^k 的資料在二進位制表示中只有一位為 1 。

其實這道題與  求乙個數在二進位制中 1 的個數  的題相似。

思路1:按位與, 將資料右移 i 位再按位與 1 判斷該位是否為 1。

public static boolean judge1(int n)

}if(count == 1)

return false;

}

思路2:讓 n & (n - 1)。如果該數是 2 得 k 次方,那麼與的結果為 0 。如 n = 8,二進位制表示為 1000,(n - 1)的二進位制為 0111,按位與後結果為 0 。

public static boolean judge2(int n)

return (n & (n - 1))==0;

}

測試

如何判斷乙個數是否是2的n次方

2的n次方可以表示為 2 0,2 1,2 2,2 3,2 4.2 n。最直觀的思想是用1做移位操作,然後判斷移位後的值是否與給定的數相等,具體的實現 如下 public class movebyte return false public static void main string args 以...

java 判斷乙個數是否是2的n次冪

與運算操作方法 2的n次冪的特點 它的所有的因子都是2,它的二進位制表示形式只有乙個1 例如 a 0100 0000 a 1 0011 1111 a 0100 1000 a 1 0100 0111 分別進行與運算,如果是2的n次冪,則與結果為false。即執行結果為false的數,即不是2的n次冪,...

判斷乙個數是否是2的N次方

對於判斷乙個數是否為2的n次方問題,通常想到的最為直接的辦法就是對這個數不斷對2取餘,為0就將該數變為該數除以2,直到最後該數為1為止。void judge int n printf no n return 不過上面的方法並不是較好的方法,其實還有更為簡潔高效的方法 乙個整數,若是2的n次方,有沒有...