计算int型数据的二进制形式中——1的个数

这篇博客介绍了五种计算整型数据二进制表示中1的个数的方法:通过除法和余数判断,位操作右移和与运算,利用&(num-1)优化,空间换时间的分支操作和查表法,以及考虑负数的位左移和与运算。每种方法的时间复杂度从O(n)到O(1)不等。
摘要由CSDN通过智能技术生成

解法一:利用整型数据除法的特点,通过相除和判断余数的值来分析1的个数.
例如:1011 0110
第一次除以2,商为 1011 011,余为 0.
第二次除以2,商为 1011 01 ,余为 1.
对于二进制操作,对数字除以2,原来的数字就会减少一个0,如果有余数,则表明当前位置有一个1.
代码如下:

int count1_1(int num)
{
    int count = 0;
    while(num)//num不等于0进入循环
    {
        if(num%2 != 0)
        {
            count++;
        }
        num /= 2;
    } 
    return count;
}

时间复杂度:O(n)


解法二:利用位操作,除以二相当于>>(右移)一位,再通过&操作符,逐位进行判断
&: 1&1 -> 1
0&1 -> 0
1或是0,&1都是其本身,所以利用&1对整数的每一位进行判断.
代码如下:

int count1_2(int num)
{
    int count = 0;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值