输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
先明白几个概念,其实和这道题关系不大
原码:一个数按绝对值大小转换成的二进制数;
反码:将原码的二进制数按位取反,得到的新二进制数;
补码:反码+1称为补码;
例:5
另外,负数以正数的补码形式表示。
思路:&运算
拿纸写一下,一个数n的二进制,比如5–0101,和n-1的二进制–0100做&运算,结果为0100,消掉了一个1(消掉了最右边的一个1),再次做&运算
0100 & 0011–0000,等于0结束,进行了两次&运算,5的二进制中1的个数就是2.
【描述起来有点乱,但自己写一下应该非常清除】
代码
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n != 0){
n = n & (n - 1);
count++;
}
return count;
}
}