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

2021-10-05 03:43:12 字數 764 閱讀 1445

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

按權與&:

4&3=0運算邏輯

4(二進位制):100

3(二進位制):011

將每一位進行與運算得出結果為:000

000(十進位制):0

所以答案是0

&&邏輯與

同真為真

bool a=true

bool b=true

a&&b=true

一假為假

bool a=false

bool b=true

a&&b=false

好接下我們舉個例子把num=6帶入到(num&num-1)==0

先算(num&num-1)

6(二進位制):110

num-1=5

5(二進位制):101

每一位進行邏輯與運算結果為:100

100(十進位制):4

這時我們算出(num&num-1)是4

4 ==0得出結果為:false

所以6不是2得n次方。

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

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

如何判斷乙個數是否是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 以...

如何判斷乙個數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 其實這道題與...