力扣--剑指offer15题--二进制中1的个数

题目描述:
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,(应该是输入9的二进制形式1001,一定是32位,用0补全)则该函数输出 2。
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。

分析:解读起来就是有一个无符号位的32位二进制数,判断这个二进制数里有多少位数是1。这是一个用位运算解决问题的例子,我们可以让这个数和1做与运算,结果如果为0那么证明最后1位是0,结果为1,最后一位为1。然后右移一位,重复上述过程。因为与运算的运算规则是:0&0=0;0&1=0;1&0=0;1&1=1。然后32位二进制的1只有最后一位是1,前31位都是0,就可以得出最后结果。
右移 >> 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)此题已经说明了是无符号位,所以高位补0,不需要考虑。

class Solution {
    
    
public:
    int hammingWeight(uint32_t n) {
    
    
        int count = 0;
        while(n != 0){
    
    
           if(n&1) count++;
            n >>= 1;   
        }
        return count;
    }
};

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof

猜你喜欢

转载自blog.csdn.net/scarificed/article/details/112972364
今日推荐