请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如:把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。
"""
1. python 整数存取的时候没有位数限制。首先判断n是不是负数,当n为负数的时候,
直接用后面的while循环会导致死循环(因为负数左移最高位补1)
或者这样解释:Python的数值类型不会出现溢出的情况,所以需要对边界值进行限定。
2.
"""
def numberOfOne(n):
"""假设输入为整数,范围在-2^32~2^32之间"""
# print(bin(n))
count = 0
if n < 0:
n = n & 0xffffffff
while n:
count += 1
n = (n - 1) & n
return count
def numberOf1(n):
"""一个看起来酷炫、也确实能用,但实测比前面要慢的东西。"""
# lyst = [(n>>i & 1) for i in range(0,32)]
# print(bin(n))
# print(lyst)
# return sum(lyst)
return sum([(n>>i & 1) for i in range(0,32)])
if __name__ == '__main__':
print(numberOfOne(0))
print(numberOfOne(3))
print(numberOfOne(0x7FFFFFFF))
print(numberOfOne(0x80000000))
print(numberOfOne(0xFFFFFFFF))