个人技术分享

题目描述:给定两个 32 位的整数,求这两个整数之间二进制之间不同的位数。
输入描述:输入共一行,包括两个正整数。
输出描述:输出二进制之间有多少位数不同
输入示例

1 8

输出示例

2

提示信息:1 的二进制表示为 0001 (前位空白填0补充),而 8 的二进制表示为 1000,1 和 8 的二进制表示有两位不同,所以答案为 2。
思路:先获取整数的二进制表示存在列表中,按位异或(两值相同得0,不同得1)将异或结果相加即是位数不同的数量,没有对齐的情况可以将二进制存储在列表中翻转后补0。

n, m=map(int, input().split())
#十进制转换成单个字符形式的二进制数:

Listn=list(format(n, 'b'))
Listm=list(format(m, 'b'))
#两列表反转:
Listn.reverse()
Listm.reverse()
#短的列表补全:
if len(Listn)<len(Listm):
    for i in range(len(Listm)-len(Listn)):
        Listn.append('0')
else:
    for i in range(len(Listn)-len(Listm)):
        Listm.append('0')
res = 0
for i in range(len(Listn)):
    res += int(Listn[i]) ^ int(Listm[i])#异或,两数相同为0,不同为1
print(res)