题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:整数的二进制减1,会把最右边的从 1 开始所有数取反,比如1100 减一为1011
然后把这两个数做与运算 1100 & 1011 =1000 会发现少了一个1,于是可以做一个计数来计算1的个数
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n!= 0){
count++;
n = n & (n - 1);
}
return count;
}
}