法一
- 每次把二进制最右边的1提取出来,计数++
- 然后异或把这个最右边的1消掉,继续循环
- 怎么提取二进制最右边的1?
- n & ((~n) + 1)
- 也可以写成n & (-n)

public int hammingWeight(int n) {int res = 0;while (n != 0) {res++;int rightOne = n & (-n);n ^= rightOne;}return res;}
法二
public int hammingWeight(int n) {int res = 0;for (int i = 0; i < 32; i++) {if ((n & (1 << i)) == 1) {res++;}}return res;}
