leetcode 191 位1的个数

求的是一个32位的二进制数中1的个数,简单的方法是不断的将一个1向左移位,然后与当前的n进行与运算,只有这一位是1时,运算结果才会不是0,于是加一。

当然还有更好的办法,就是n & n-1这个做法,这个运算会把n的最低一位的1翻转为0,也就是说,如果不断重复这个运算,最终n就会变成0,运算的次数自然就是1的个数,贴代码

class Solution {
public:
    int hammingWeight(uint32_t n) 
    {
        int good = 0;
        while(n)
        {
            n &= (n-1);
            good++;
        }
        return good++;
    }
};

 

posted @ 2021-03-27 11:46  zhaohhhh  阅读(64)  评论(0)    收藏  举报