输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路
不为0的数,至少一位为1。假设不为0的数减去1后,最后一位变为0,其他不变。相当于取反
如:
情况1:1001:最终去掉最右边的1
1001 - 0001 =1000
1001&1000 = 1000
情况2:1100:最终去掉的第2个1,最右边数第1个1
1100 - 0001 = 1011
1100 & 1011 =1000
public class Solution {
public int NumberOf1(int n) {
int count =0;
while(n!=0){
count++;
n=(n-1)&n;
}
return count;
}
}