题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
解法
用1移位来按位与,实现代码如下:
public class Solution {
public int NumberOf1(int n) {
int count = 0;
int flag = 1;
while (flag != 0) {
if ((n & flag) != 0) {
count++;
}
flag = flag << 1;
}
return count;
}
}
查阅讨论区,发现网友有更好的方法,有几个1就循环几次,因为每次减1只将1的右边取反,其他位不受影响,实现代码如下:
public static int NumberOf1(int n) {
int count = 0;
while (n != 0) {
++count;
n = (n - 1) & n;
}
return count;
}