昨天看到淘公尺網路的一道程式設計題,給定乙個數判斷這個數是不是2的冪。
我自己想到的使用遞迴的方法進行實現,**如下。
class squ2;
} public static boolean is2(int a)
if (a%2==1)
return is2(a=a/2);
}}
不過我乙個同學用了乙個更加簡便的方法:
用這個數和比他小的下乙個整數相與,如果結果為0則該數是2的冪,否則不是,如8和7相與為0。
**如下:
public static boolean is2_1(int b)
return false;
}
看起來簡便多了,但是還是不知道為什麼這樣就可以。
判斷乙個數是不是2的冪
將2的冪次方寫成二進位制形式後,很容易就會發現有乙個特點 二進位制中只有乙個1,並且1後面跟了n個0 因此問題可以轉化為判斷1後面是否跟了n個0就可以了。如果將這個數減去1後會發現,僅有的那個1會變為0,而原來的那n個0會變為1 因此將原來的數與去減去1後的數字進行與運算後會發現為零。最快速的方法 ...
判斷乙個數是不是2的冪
我們經常會遇到這樣乙個問題,就是判斷某個資料是否為2的n 次方 1,2,4,8,16.例如如果使用者輸入的不是 2 n,則要求使用者重新輸入。為了說明這種判斷演算法,我首先構造乙個測試程式,如下 include include int main end clock printf the total ...
判斷乙個數是不是2的整數次冪
用位運算 二進位制數的位權是以2為底的冪,如果乙個整數 m 是 2 的 n 次冪,那麼轉換為二進位制之後只有最高位為 1,其餘位置為 0,再觀察 m 1 轉換為二進位制後的形式以及 m m 1 的結果,例如 2 0000 0010 1 0000 0001 2 1 0000 0010 0000 000...