题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
源码:
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。
反码:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
补码:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
# -*- coding:utf-8 -*-
#当n为负数时,在计算机中int数由32位二进制数表示,负数的补码由其二进制先取反后加1,
#此处我们先直接算出其十进制补码的数值,再转换为二进制数进行计算
"""
int范围内,负数(十进制)n的二进制的补码有两种形式求得
1. pow(2, 32) + n, 然后再转化为二进制,即为二进制的补码
2. 直接用二进制求补码
两种方式得到的补码相同
"""
class Solution:
def NumberOf1(self, n):
# write code here
if n < 0:
# 转化为十进制的补码
n = pow(2, 32) + n
# bin 用来求二进制,用count统计1的个数
return (bin(n)).count("1")