题目

输入一个整数,输出该数二进制表示中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