将一个整数转换为二进制形式,统计二进制数中1的个数,如果是负数,按补码统计1的个数
def oneNumber(n):
print(bin(n))
if n < 0:
# 在python中,负数与0xFFFFFFFF按位与,实际上按照语法,负数在做与操作之前会先把自己转为计算机中的二进制表示形式,然后与0xFFFFFFFF做与操作,也就变成了一个二进制表示的无符号数
n = n & 0xffffffff
print(bin(n))
print(len(bin(n)))
# 去掉开头的0b
m = len(bin(n)) - 2
count = 0
'''
1101 = 13
1000 = 8 count++
0100 = 4 count++
0000 = 0
0001 = 1 count++
'''
for i in range(0, m):
# 具体流程如上
if n & 2 ** i != 0:
count += 1
return count
print(oneNumber(13))
print(oneNumber(-1))
0b1101
0b1101
6
3
-0b1
0b11111111111111111111111111111111
34
32
正文完