判斷一個自然數是否為2的非負整數次方(power of 2)
阿新 • • 發佈:2018-12-27
public class IsPowerof2Demo { public static boolean isPoweroftwo(int x){ if(x<1){ return false; } int andVal = x&(x-1); int xorVal = x^(x-1); if(andVal==0 && xorVal==2*x-1){ return true; } return false; } public static void main(String[] args) { for(int i=0;i<100;i++){ if(isPoweroftwo(i)){ System.out.println(i); } } } }
思路:從二進位制的角度講,我們需要驗證輸入的數是否為1000這種形式,即只有一個1,後面全是0。
一種策略是,把輸入的這個數減1, 那麼1000會變成0111,相當於這幾位取了個反,然後如果對二者做與操作,結果為0,如果做異或操作,則變成1111,而1111可以看成10000-1,其中10000是原始輸入左移一位,即乘以2.