题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
1、思路分析
自己没有思路,搬运的评论区大佬的解释。我们先来看看二进制表示形式下的整数减去1会发生什么,假设一个整数不为0,例如1100,1100-1=1011,可以看出,减去1的结果为最右边的1变为0,最右边的1后面的0(如果有)全部变为1,即从最右边的1,到最右边一位,所有位的结果变成了相反数,我们考虑按位与运算,即将原整数和减去1后的整数做按位与运算,从最右边的一个1开始,其右边所有位都会变为0,因此又会出现新的最右边的1,持续下去,该整数有多少个1,就能进行多少次这样的操作,直到原整数为0。
2、代码

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

3、复杂度分析
待续