问题描述:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路分析:
首先我们知道正数的原码、反码、补码是一样的;负数的补码是原码符号位不变其余位取反加1得到的;
根据补码原理我们将其分为求0、求正数、求负数的补码中1的个数;
求出补码之后我们再使用.count("1")来进行数1的个数;
正数直接使用bin()进行求解补码;
python中负数的补码使用bin(n & 0xffffffff)进行求补码(这部分博主也不是很了解为什么是这样求补码,欢迎大家解答一下)
代码如下:
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
if n == 0:
return 0
elif n > 0:
x = bin(n)
num = x.count("1")
return num
else:
x = bin(n & 0xffffffff)
return x.count("1")
这题中很重要的一点就是学习利用python求解负数的补码bin( n & 0xffffffff)。