题目描述:
输入一个整数,输出该数二进制中1的个数,其中负数用补码表示。
答案:
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
return sum([(n>>i & 1) for i in range(0,32)])
解析:>>二进制位右移,&按位与(二进制位都为1时结果为1),1的二进制表示为[0000 0000 0000 0000 0000 0000 0000 0001],n的32位通过右移的方式每一位和1进行“与”操作,从而得到n的二进制中1的个数,并相加。(位操作是用补码计算的)
补充:
十进制转二进制
def original(number):
a = []
value = number
while value:
b = value%2
a.insert(0,b)
value = value//2
return a
负数原码转补码(a为原码)
def negative_complement(a):
length = len(a)
l = length
while l < 8:
a.insert(0,0)
l+=1
c = []
for i in a:
if i==1:
c.append(0)
elif i==0:
c.append(1)
c[7] = 1
return c