Python3 整数对象存储为无符号数加上符号位标志,所以不存在“负数”补码形式,因此,计算 “1” 的数量需要按去符号后的无符号数:
cnt=bin(n).count('1')
另外,Python3 无长整,整数长度原则上不限,所以不能以假定的 32 位处理。
补码+原码=2**32
1 # -*- coding:utf-8 -*- 2 class Solution: 3 # bin函数: bin返回一个整数的二进制字符串,以0b开头, 4 # bin(10) '0b1010' bin(-10) '-0b1010' 5 # 6 # count函数 返回字符串当中非重叠的字符串的个数,可以传入start,end来表示对字符串切片的结果 7 # 8 #如果一个数为负数,那么2**32 + n 然后再用bin返回的就是它的补码形式。 补码+原码=2**32 9 def NumberOf1(self, n): 10 if n >= 0: 11 return bin(n).count('1') 12 else: 13 return bin(2**32 + n).count('1') 14 15 if __name__ == '__main__': 16 solution = Solution() 17 print(solution.NumberOf1(10)) 18 print(solution.NumberOf1(-10))
标签:bin,10,Python,32,补码,count,二进制,__,该数 From: https://www.cnblogs.com/bravesunforever/p/17642657.html