编程之美_006求二进制数中1的个数

本文介绍了四种计算整数二进制表示中1的个数的方法,包括基本循环、位移操作、巧妙的与操作和查表法。每种方法都附有代码实现和详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 求二进制数中1的个数
public class Test_006
{
    public static void main(String[] args)
    {
        int number = 123;
        int total = 0;// 记录1的个数
        System.out.println("数字为:" + number);
        System.out.println("数字二进制形式为:" + Integer.toBinaryString(number));
        System.out.println("------------------");
        // 解法一,每次与2求余,看是否为奇数,是的话就累计加一,最后这个结果就是二进制表示中1的个数。
        while (number > 0)
        {
            if (number % 2 == 1)
            {
                total++;
            }
            number /= 2;
        }
        System.out.println("解法一数字中1的个数:" + total);
        System.out.println("------------------");
        // 解法二,同样用到一个循环,只是里面的操作用位移操作简化了。
        number = 123;
        total = 0;

        while (number > 0)
        {
            total += number & 1;
            number >>= 1;
        }
        System.out.println("解法二数字中1的个数:" + total);
        System.out.println("------------------");
        // 解法三,用到一个巧妙的与操作,v & (v -1 )每次能消去二进制表示中最后一位1,利用这个技巧可以减少一定的循环次数。
        number = 123;
        total = 0;
        while (number > 0)
        {
            number &= (number - 1);
            total++;
        }
        System.out.println("解法三数字中1的个数:" + total);
        System.out.println("------------------");
        // 解法四,查表法,因为只有数据8bit,直接建一张表,包含各个数中1的个数,然后查表就行。复杂度O(1)。
        // 直接把所有结果记录在一个数组中,然后根据需要查询即可、
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值