题目描述:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1,因此如果输入9,则输出函数输出2。
解题思路:一个数与这个本身减一之后进行与运算,会把右边(低位)的第一个1变成0,而左面的1保持不变。比如:二进制数1100(十进制是12),进行减一,得到1011,用1011再与原来的1100进行相与,得到1000,左面的1不变,再依次这么循环下去,一直到这个数变成0,迭代停止。
代码如下:
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n != 0) {
count++;
n = (n - 1) & n;
}
return count;
}
}