1. 程式人生 > >判斷一個自然數是否為2的非負整數次方(power of 2)

判斷一個自然數是否為2的非負整數次方(power of 2)

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.