剑指Offer-二进制中1的个数

题目描述 二进制中1的个数

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

解题思路

转自 https://www.cnblogs.com/edisonchou/p/4752086.html
为了避免死循环,我们可以不右移输入的数字i:
  (1)首先把i和1做与运算,判断i的最低位是不是为1。
  (2)接着把1左移一位得到2,再和i做与运算,就能判断i的次低位是不是1。
  (3)这样反复左移,每次都能判断i的其中一位是不是1。

代码

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

你可能感兴趣的:(剑指Offer-二进制中1的个数)