Java之一個整數的二進制中1的個數


這是今年某公司的面試題:

一般思路是:把整數n轉換成二進制字符數組,然后一個一個數:

private static int helper1(int i) {
    char[] chs = Integer.toBinaryString(i).toCharArray();
    int res = 0;
    for (int j = 0; j < chs.length; j++) {
        if (chs[j] == '1') {
            res++;
        }
    }
    return res;
}

 

第二種方法是:將整數n與1進行與運算,當整數n最低位是1時,則結果為1,否則結果為0。 然后將1左移一位,繼續與n進行與運算,當次低位是1時,結果非零,否則結果為0。循環以上操作,記錄非零的次數即可。 

    public static int helper2(int n ){

        int count = 0;
        int flag = 1;
        while(flag <= n){
            if((n&flag) != 0)
                count++;
            flag = flag<<1;
        }
        return count;
    }

 

第三種方法是:將整數n與1進行與運算,當整數n最低位是1時,則結果為1,否則結果為0。 然后將 n 右移一位,繼續與 1 進行與運算。循環以上操作,直到n=0結束,記錄非零(為1)的次數即可。

    private static int helper3(int n) {
        int res = 0;
        while (n!=0) {
            if ((n&1) == 1) {
                res++;
            }
            n = n>>1;
        }
        return res;
    }

 

第四種方法是:將整數n與(n-1)進行與運算把一個整數減去1,再和原整數做與運算,會把該整數最右邊一個1變成0。那么一個整數的二進制表示中有多少個1,就可以進行多少次這樣的操作。從而可以減少比較的次數。

    private static int helper4(int n) {
        int res = 0;
        while (n!=0) {
            res++;
            n = n&(n-1);
        }
        return res;
    }

 

 

Over...

 

參考:

1. Java求一個整數的二進制中1的個數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM