题目:输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
方法一:先转化为补码在计算1的个数。
注意将一个十进制的数转化为补码可以直接使用该数与32位全1的二进制数按位与。
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
n = n & 0xFFFFFFFF
bin_num = bin(n)
count=0
for i in bin_num:
if i == '1':
count+=1
return count
方法二:直接将该数向右移位,直接利用二进制数在计算机内是按照补码存储的原理。
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
count = 0
for i in range(32):
count += int((n >> i) & 1)
return count
小彩蛋:
刚开始理解错了输入,以为输入的就是二进制的数,要先计算补码再统计1的个数,完全在二进制字符串的基础上操作,结果就很费劲,但是在IDE调出来了。