给定一个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;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小七蒙恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值