二进制中1的个数
时间限制:1秒 空间限制:32768K 热度指数:365253
算法知识视频讲解
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解析
正数的补码 = 原码
负数的补码 = {原码符号位不变} + {数值位按位取反后+1} or
= {原码符号位不变} + {数值位从右边数第一个1及其右边的0保持不变,左边安位取反}
以十进制整数+97和-97为例:
+97原码 = 0110_0001b
+97补码 = 0110_0001b
-97原码 = 1110_0001b
-97补码 = 1001_1111b
这里记住
-97&0xffffffff的bin():
bin(-97&0xffffffff)是-97的补码:
'0b1111111110011111'
代码
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
# 如果n大于0,直接计算即可,如果n小于0,计算2的32次方加上n的结果中1的个数
if n >= 0:
return bin(n).count("1")
else:
return bin(n & 0xffffffff).count("1")