题目描述 二进制中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;
}
};