二進制中1的個數(Java實現)


問題: 輸入一個整數,求其二進制中1的個數

看到這個問題,我們應該想到數的位運算

解法一:我們每次將此數&1 ,如果結果等於1,證明此數的最后一位是1,,count++; 然后在將數右移一位,

循環下去,直到此數==0,即可統計出其中1的個數

Test1:

 1  private static int getNum1(int i) {
 2         int count=0;
 3         while (i!=0){
 4             if((i&1)==1){
 5                 count++;
 6             }
 7             i= i>>1;
 8         }
 9         return count;
10     

缺點:這種情況只能適用於正整數,當為負數時,負數循環右移時是用1來填前面空缺的位置,所以永遠都不會等於0,陷入死循環

解法二:我們的分析就是:把一個整數減去1。再和原整數做與運算,會把該整數最右邊的一個1變成0.那么一個整數的二進制表示中有多少個1,就能夠進行多少次運算。

基於這種思路。我們能夠寫出這種代碼:

Test2:

   private static int getNum1(int i) {
        int count=0;
        while (i!=0){
            i=i&(i-1);
            count++;
        }
        return count;
    }

這樣操作,無論數是正還是負都可以完美求出1的個數

解法三:我們調用Integer的方法,將i的二進制轉為字符串,再依次遍歷其中1的個數,也可以完美解決。

Test3:

    private static int getNum1(int i) {
        int count=0;
     String str=Integer.toBinaryString(i);
        for (int j = 0; j <str.length() ; j++) {
            if(str.charAt(j)=='1'){
                count++;
            }
        }
        return count;
    }

 


免責聲明!

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



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