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

2022-02-03 01:47:48 字數 443 閱讀 5122

參考:

如題,如何判斷乙個整數是否是2的n次方,我能想到的方法有兩個

1.一直除2,看最後是否等於1.(最笨的方法)

2.轉換成2進製,看是否是這個樣子的:1,10,100,1000,10000,就是除了最高位是1,其他都是0,或者說只有乙個1.

3.當我還在為我能想到第二個方法而沾沾自喜的時候,我看到了下面這種更巧妙的方法

以4(100)    7(0111)    8(1000)為例

4 & 3 --> 100 & 011 = 0

7 & 6 --> 0111 & 0110 != 0

8 & 7 --> 1000 & 0111 = 0

即 如果 m & (m - 1) == 0,則m是2的n次方。

public static boolean fun(int i)

幾種判斷乙個整數是否是2的n次方冪的方法

1 簡單除法 int i 128 待判斷的整數 int count 1 待判斷的整數是2的count次方 while i if 0 i 2 else 2 16進製制中1有幾個 大家發現沒有,凡是2的n次方的整數,它的二進位制的所有位中都只有乙個1,並且這個1肯定在最高位。既然這樣的話,那麼這個問題就...

幾種判斷乙個整數是否是2的n次方冪的方法

1 簡單除法 int i 128 待判斷的整數 int count 1 待判斷的整數是2的count次方 while i if 0 i 2 else 2 16進製制中1有幾個 大家發現沒有,凡是2的n次方的整數,它的二進位制的所有位中都只有乙個1,並且這個1肯定在最高位。既然這樣的話,那麼這個問題就...

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

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