二进制中1的个数

题目

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

解题思路

  1. 负数是补码表示
  2. >>> 为无符号右移,>>为有符号右移,当 n 为负数是会增加多余的1
1. public int NumberOf1(int n) {
2. int mask = 0x01;

4. int res = 0;
5. int t = n;
6. while (t != 0) {
7. if ((t & mask) == 1) {
8. res++;
9. }
10. t = t >>> 1;
11. }

13. return res;
14. }