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