# 输入一个32位整数，输出该数二进制表示中1的个数。
#
# 注意：
#
# 负数在计算机中用其绝对值的补码来表示。
# 样例1
# 输入：9
# 输出：2
# 解释：9的二进制表示是1001，一共有2个1。
# 样例2
# 输入：-2
# 输出：31
# 解释：-2在计算机里会被表示成11111111111111111111111111111110，
#       一共有31个1。

# N > 0, N = n1 + n2 + ... + nk
# 1. 假设ni >= 5, 3 * (ni - 3) >= ni? 3ni - 9 >= ni? 2ni >= 9?
# 2. ni = 4 = 2 * 2
# 3. 2 * 2 * 2 < 3 * 3

class Solution(object):
    def NumberOf1(self, n):
        """
        :type n: int
        :rtype: int
        """
        return sum([(n >> i) & 1 for i in range(32)])
