將2的冪次方寫成二進位制形式後,很容易就會發現有乙個特點:二進位制中只有乙個1,並且1後面跟了n個0; 因此問題可以轉化為判斷1後面是否跟了n個0就可以了。
如果將這個數減去1後會發現,僅有的那個1會變為0,而原來的那n個0會變為1;因此將原來的數與去減去1後的數字進行與運算後會發現為零。
最快速的方法:
(number & number - 1) == 0
原因:因為2的n次方換算是二進位制為10……0這樣的形式(0除外)。與上自己-1的位數,這們得到結果為0。例如。8的二進位制為1000;8-1=7,7的二進位制為111。兩者相與的結果為0。計算如下:
1000
& 0111
-------
0000
public class is2
public static void main(string args)
}
判斷乙個數是不是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...
確定乙個數是不是2的冪
昨天看到淘公尺網路的一道程式設計題,給定乙個數判斷這個數是不是2的冪。我自己想到的使用遞迴的方法進行實現,如下。class squ2 public static boolean is2 int a if a 2 1 return is2 a a 2 不過我乙個同學用了乙個更加簡便的方法 用這個數和比...