输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
public int NumberOf1(int n) {
int count = 0;
while(n!=0){
n = n & (n-1);
count++;
}
return count;
}
思路:分析代码中核心代码就是n = n & (n-1); 基本思想就是 n-1,在二进制只有0和1 的情况下,-1代表的就是n的二进制数最右边的1会变成0,不管最右边的1后面还有多少个0,都会变成1。
n-1再和n做位与计算,也就是从最右边的那个1位置往后开始,都会变成0,相当于消除了一个1,count++;当所有的1被消除,也就是n=0;