题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题解
只用整数自己判断,如果n!=0;计算器先加1;然后n=n&(n-1),就“减去”了n中的一个1,一直到减去所有的1,这个时候n==0,循环结束
从二进制的角度讲,n相当于在n - 1的最低位加上1,我们不断清除n的二进制表示中最右边的1并计数即可
public class Solution {
public int NumberOf1(int n) {
int count=0;
while(n!=0){
++count;
n=n&(n-1);
}
return count;
}
}