二进制中1的个数
- 利用(n-1)&n来巧妙计算1的个数
计算n-1时,如果n的最后一位是0,则会向前一位借位,如果前一位仍是0,则继续向前借位,直到遇到第一个不为0的数,
xxxx1000
- 1
xxxx0111
与后 xxxx0000
将最右边的1变为0;
所以重复计算,循环多少次,就找到了多少个1
public int getNumber(int n){
int count = 0;
while(n!=0){
++count;
n=(n-1)&n;
}
return count;
}