输入一个整数,输出该数二进制表示中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;
}
本文介绍了一种高效算法,用于计算任意整数(包括负数)二进制表示中1的数量。通过使用位运算符,尤其是n&=(n-1),巧妙地消除二进制中最右侧的1,从而实现快速计数。文章详细解释了位运算符的运用,并提供了完整的Java代码示例。
200

被折叠的 条评论
为什么被折叠?



