C語言 不使用迴圈判斷乙個數是否為2的N次方

2021-07-25 14:46:40 字數 815 閱讀 2885

對於判斷乙個數是否為2的n次方問題,通常想到的最為直接的辦法就是對這個數不斷對2取餘,為0就將該數變為該數除以2,直到最後該數為1為止。 

void judge(int n) 

}

printf("no!\n");

return;} 

不過上面的方法並不是較好的方法,其實還有更為簡潔高效的方法 

乙個整數,若是2的n次方,有沒有想過對這個整數的2進製進行考慮,比如12,它的二進位制為:1100

2 10 

4 100 

13 1101 

16 10000 

32 100000 

從上面的舉例我們發現,凡是2的n次方的整數,其二進位製碼只有乙個1。 

假設a為要證明的整數,b等於a-1,我們假設a為2的n次方數,那麼a&b = 0,這很好證明。那是不是滿足a&b = 0就能證明a是2的n次方數呢? 

假設乙個數的二進位制為1000000000000000(這裡為int型:兩個位元組),那這個數減去1則變為0111111111111111。我們知道,在計算機中,數都是以其二進位制的補碼放置的,最高位為1代表負數,最高位為0代表正數。上面兩個數中, 

1000000000000000為負數,0111111111111111為正數,這兩個數相與為0,但1000000000000000並不是2的n次方(2的n次方為正數)。 

因此,倘若乙個數為2的n次方,那麼該數應滿足大於0且該數和該數減一后的值相與等於0時才為2的n次方。

void judge(int n) 

printf(「no!\n」); 

return; 

}

不使用迴圈,判斷乙個數是否是2的N次方

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

C語言判斷乙個數是否為素數

素數又稱質數。所謂素數是指除了1和它本身以外,不能被任何整數整除的數,例如17就是素數,因為它不能被2 16的任一整數整除。思路1 因此判斷乙個整數m是否是素數,只需把m被 2 m 1 之間的每乙個整數去除,如果都不能被整除,那麼m就是乙個素數。思路2 另外判斷方法還可以簡化。m不必被 2 m 1 ...

c語言判斷乙個數是否為偶數

include include bool isou intn else int main int argc,char ar 1 對乙個數字與1是用來取位,n 1就可以將數字n最低位取出,如果n最低位是0 這裡指n的二進位制表示,所有的數在記憶體均是以二進位制形式表示 那麼表示n為偶數,因為最低位為0...