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

2021-06-29 17:00:36 字數 672 閱讀 7947

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)

}

以上演算法的時間複雜度為o(logn)那麼是否存在效率上更高的演算法呢?通過對2^0,2^1,2^2,2^3,2^4......2^n分析,發現這些數字的二進位制形式分別為:1,10,100,1000。。。從二進位制的表示可以看出,如果乙個數是2的n次方,那麼這個數對應的二進位制表示中只有一位是1,其餘位都為0,因此,判斷乙個數是否為2的n次方可以轉換為這個數對應的二進位制表示中是否只有一位為1。如果乙個數的二進位制表示只有乙個位為1,例如num=00010000,那麼num-1的二進位制表示為:num-1=00001111,由於num與num-1二進位制表示中每一位都不相同,因此num&(num-1)的運算結果為0,可以利用這個方法來判斷乙個數是否為2的n次方。具體**如下:

public class movebyte 

public static void main(string args)

}

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

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

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

問題描述 如何判斷乙個數 n 是否是 2 的 k 次方?注意 不用求 k 是多少,只需要判斷,請編寫函式實現。首先研究一下 2 的 k 次方的資料的特徵 0001 b 2 0 1,0010 b 2 1 2,0100 b 2 2 4。以此得出 2 k 的資料在二進位制表示中只有一位為 1 其實這道題與...

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

當時去理解這段 num num 1 0時 將 按權與當成是 邏輯與進行運算 注意 取位址運算子和按權與得符號都是 取位址時直接符號後面加變數 如 a,b。按權與時後面需要跟乙個數,如a 1。按權與得優先順序小於 得優先順序,不要搞混!花了好長時間也沒搞懂到底是怎麼樣的運算邏輯,後來網上查了一下才知道...