题目
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题解
# n = eval(input())
count = 0
i = 0
# 在python中,负数的补码不像正数的补码前面全是0可以自动忽略。
# 负数的补码中基本为1,而1的个数按照位数来确定。
# 所以本题需要规定负数补码的位数。
# 方法一:(Lowbit)
if n < 0:
n = n & 0xffffffff
while n:
n = n - (n & -n)
count += 1
return count
# 方法二:(位运算)
# while i < 32:
# if n >> 0 & 1 == 1:
# count += 1
# n = n >> 1
# i += 1
# print(count)
# PS:-1的源码为1000 0001
# -1的反码为1111 1110
# -1的补码为1111 1111

京公网安备 11010502036488号