题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
输入:00000000000000000000000000001011
输出:3
题解: 采用n&(n-1) (n-1) 去掉了二进制最右边的数值,然后and操作,若不为0 则还含有1,继续直至为0
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while (n!=0){
count++;
n = n&(n-1);
}
return count;
}
}
2、 将二进制数与1 and操作,若为0 则不是1 ,若为1 ,则最右位为1 ,然后将输入二进制数右移1位,继续比较。
int count = 0;
while(n!=0){
count += n&1;
n >>>=1;
}
return count;