题目描述
- 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解题思路
- n - 1 可以将最低位的1变成0,最低位右边的所有0变为1,比如 1100100 - 1 => 1100011
- n & (n-1) 可以最低位开始往右所有位置为0,用 n & (n - 1) 更新n,能进行 n & (n - 1) 次数即为 1 的个数。
AC代码
class Solution {
public:
int NumberOf1(int n) {
int num = 0;
while(n)
{
num++;
n = n & (n - 1);
}
return num;
}
};
网友评论