题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:
如果一个二进制整数不为 0 , 那它必定含有 1 ,如果这个数减 1 ,那么最右边 1 就会变成 0 ,原来在这个 1 后面的 0 都会变成 1 ,其余位不会受到影响
例如 1101000 , 减 1 得 1100111, 再和原来的数做与运算,得 1100000
按同样的方法计算一次,得 1000000
所以二进制中 1 的个数,可以通过在n不等于0时 n&(n-1) 的次数得出
以下代码:
public class Solution {
public int NumberOf1(int n) {
int sum = 0;
while(n != 0){
n = n&(n-1);
sum++;
}
return sum;
}
}