输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
解答:一个整数n的二进制数为1100,n-1对应的二进制数是1011,n&(n-1)为1000,count数加1,判断出了其中的一个1,如此往复。
n &= (n - 1) 的作用可以理解成:将 n 这个数的二进制表示中,最右边的一个1给去掉。
位运算符知识:
& 与运算:都为1,结果为1; | 或运算:只要有1,结果为1;^ 异或运算:两位相同为0,不同为1; ~ 非运算,全部取反;<< :左移运算符; >> 右移运算符; >>> :无符号右移运算符
public int NumberOf1(int n) {
int count = 0;
while (n != 0) {
n &= (n - 1);
count++;
}
return count;
}