二进制中1的个数

题目

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

解题思路

  1. 负数是补码表示
  2. >>> 为无符号右移,>>为有符号右移,当 n 为负数是会增加多余的1
  1. public int NumberOf1(int n) {
  2. int mask = 0x01;
  3. int res = 0;
  4. int t = n;
  5. while (t != 0) {
  6. if ((t & mask) == 1) {
  7. res++;
  8. }
  9. t = t >>> 1;
  10. }
  11. return res;
  12. }