给定一个int 数字,要求计算出int数字对应的二进制中1的个数

package com.dume.server.face;

/**
 * 给定一个int 数字,要求计算出int数字对应的二进制中1的个数
 */
public class Digit {

    public static void main(String[] args) {
        int num =123456;
        System.out.println(countA(num));
        System.out.println(countB(num));
        System.out.println(countC(num));
    }

    /**
     * 方法1:一个个位数判断与1相与操作,
     * 与操作遵照:全1则1,否则为0原则
     * 然后原数字无符号右移一位,最高位补0
     * @param num
     * @return
     */
    public static int countA(int num){
        
        int count = 0;
        while(num!=0){
          count += num & 1;
          num>>>=1;
        }
        
        return count;
    }

    /**
     * 方法2:每次减去1得到新数,新数的得到:是原数字2进制的右边第一个0变成1,然后右边第一个1变成0
     * 新数与原数相与就会把右边第一个1变成0;
     * 然后 count++ 成功统计到一个1
     * 直到全为 0 停止
     * @param num
     * @return
     */
    public static int countB(int num){
        int count = 0;
        while(num!=0){
          num = num & (num-1);
          count++;
        }
        return count;
    }


    /**
     * 方法3:这个算是最直接,最有效的方法,不再解释。
     * @param num
     * @return
     */
    public static int countC(int num){
        int count = 0;
        while(num!=0){
           count += (num%2);
           num >>=1;
        }
        return count;
    }

}


版权声明:本文为qq_38105536原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。