剑指offer Q15 二进制中1的个数

思路

本题要求计算出一个整数的二进制中的1的个数,考察的是位运算的运用和理解。
本题会用到>>、>>>、&等运算符,不会的可以去查一下。
本题的重点在于怎样去统计1的个数,其实这个和去计算一个数各位数之和类似(比如让你求39的各位数之和,也就是12)。
那个题是循环取余法去取得各个位的值然后加起来即可,那么我们是否可以采用类似的方法呢?

注意到本题的数实际上是在二进制上进行操作,而那个题是在10进制上进行取模10操作的.那类似的我们可以在二进制上进行取模2操作,这样就能获取这个数最右边上的值了,假设9的二进制是1001,那么对其进行取模2得到的就是那个1,那么这样就能进行统计了。

代码

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int sum=0;
        while(n!=0){
            if((n&1)!=0)sum++;
              n=n>>>1;
        }
        return sum;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值