输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
解析:一个整数的二进制,至少存在一个1,减1的话,其最右边的1变为0,再往右的所有0都会变成1。新数与旧数与,则只剩下左边的数,迭代多次,所有的1都会变为0;
举例说明:1100----减1---->1011;两数与结果为:1000,消去一个1;继续迭代:1000---减1--->0100;两数与结果为0;综上1100,只有两个1
代码:
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n != 0){
count++;
n = n & (n-1);
}
return count;
}
}