题目描述

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

思路

  1. 可以使用位运算来处理。
  2. n & (n-1) 结果中1的个数比n少一个。
  3. 在位运算时,负数就是用补码运算的,所以不需要特殊处理。

ps:补码为原码各个位置取反,最后在末位加1。

例如:4 & 3 = 0 (1个1 变成了 0个1)、5 & 4 = 4 (2个1 变成了 1个1)

Java代码实现

    public int NumberOf1(int n) {
        int res = 0;
        while( n !=  0){
            res++;
            n = n & (n-1);
        }
        return res;
    }