这里主要是负数,我们可以使用bin这个函数。

bin()一个十进制的负数,返回二进制的原码,加个负号。bin一个整数是返回补码。bin一个十六进制的负数,返回二进制。所以为了得到十进制负数的补码,需要-3&十六进制oxfffffffd按位与操作。

a = bin(-3)

print(a) =====> -0b11

a = bin(3)

print(a) ====>0b11

b = bin(-3 & 0xffffffff)

print(b)=====>0b11111111111111111111111111111101

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        # write code here
        if n < 0:
            n = n & 0xffffffff
        binNum = bin(n)[2:]
        arr = str(binNum)
        res = 0
        for ch in arr:
            if int(ch) == 1:
                res += 1
        return res