參考:
如題,如何判斷乙個整數是否是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次方,有沒有...