二进制中1的个数

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

思路

时间复杂度O(n),空间复杂度O(1)。

代码

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

笔记

n&n-1作用是将n最后一位1变成0,类似树状数组的lowbit。

原文地址:https://www.cnblogs.com/ustca/p/12321563.html