求二进制中1的个数(C++)

请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。

示例 1:

输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。

解:
最初错误代码,大家可以不用看:

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int count=0;

        while(true)
        {
            uint32_t m = n && 1;//!!错误!是&
            if(m)//错误陷入无限循环了
            {
                count++;
            }else
            {
                int i=1;
                n>>i;
                i++;
                if(i==32)break;
            }
        }
        //错误!没有返回值
    }
};

之后修改:

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int count=0;
        //int a=32;
        while(n)
        {
            uint32_t m = n & 1;
           
            if(m)
            {
                count++;
            }
             n>>=1;
        }
        return count;
    }
};
//下面是大佬解法
// class Solution {
// public:
//     int hammingWeight(uint32_t n) {
//          int res = 0;
//          while(n) res += n & 1, n >>= 1; //m&1表示m与1的各个位数相与,最后一位为1则加1,为0则加0
//          return res;
//     }
// };


这道题最初有3个疑惑点。
1.&和&&的区别?
答:&经常用于按位运算,一位一位的与。
而&&多用于在同时满足两个条件时使用!

2.00000000000000000000000000001011 这种32位的二进制数右移一位的话,是把个位数的1移到最左边么?还是直接移出去没有了?
答:直接没了,所以这个循环才能结束!

3.题目说的是输入整数,但输入25之类的是没有结果的,事实上应该输入的是二进制数才可以。

你可能感兴趣的:(LeetCode(C++),c++,算法)