因此,根据 geeksforgeeks.org,在下面的 python scriptA 中,该脚本是告诉我将 a 转换为 b 时要翻转的位数,因此在复制计数结果后,我尝试创建自己的 python 脚本来测试这一点。因此,关于我自己的python脚本的摘要给出了一个计数和一个整数变量A,根据计数翻转位以获得与b相同的位,而无需在方程中使用b,仅使用计数和a,所以当我得到结果整数它与整数 b 不同,所以我修改了脚本并再次尝试,但它仍然没有任何帮助 脚本A
if __name__ == '__main__':
a = 10
b = 20
# Function call
# Converting int to binary and counting number of bits
result = bin(a ^ b).count("1")
print(result)
结果数为 4
所以我制作了我的脚本,但它不起作用,所以任何人都可以创建一个可以帮助我的 python 脚本,非常感谢 这就是我的脚本
def flip_bits_to_match_count(a, count, b):
flipped_a = a
flips = 0
while bin(flipped_a).count("1") != count:
flipped_a ^= 1 << flips
flips += 1
return flipped_a == b
a = 10
count = 4
b = 20
matched = flip_bits_to_match_count(a, count, b)
print("Does the flipped 'a' match 'b'?", matched)
结果 A 是 53 而不是 20 这是我的问题抱歉我没有早点发布
您遇到的问题是结果告诉您需要翻转多少位,但不告诉您哪些位。没有办法用这个数字来展开 A 以获得 B。
但在某种程度上它要简单得多,因为使用 EXOR(异或)——这就是你在执行 a^b 时所做的事情,生成一个数字,其中每个二进制位告诉你是否翻转 a 中的一位来给出你就是 b 中的那一位。
例如,假设你有这个
a = dec 10 binary 01010
b = dec 22 binary 10110
a ^ b binary 11100
您可以看到a^b中的每一位都告诉您a中的一位是否需要翻转才能生成b中的相应位(反之亦然)。事实上,这里存在对称性,每个都可以与剩下的两个中的任何一个一起使用来生成第三个。这就是异或的美妙之处(以及为什么它在加密中具有重要作用)。