Number of 1 bits

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

 把数字n与1作与运算,判断n的最低位是不是1,接着把1左移一位得到2,再和n做与运算,就能判断n的次低位是不是1... 这样反复左移,每次都能判断n的其中一位是不是1。这种解法循环的次数等于n二进制的位数。

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

*把n减1,就是把n二进制表达中的最后一个1变为0,如果它右边还有0的话,则所有的0都变为1,但该位左边的数字保持不变。如果把n减去1,再和原来的n做与运算,就会把该整数最右边的1变成0。n的二进制表达中有多少个1,就可以进行多少次这样的操作。

*一个数如果是2的整数次方,那么它的二进制表达中只有一个1。

posted on 2016-05-14 16:41  summerkiki  阅读(88)  评论(0编辑  收藏  举报