Python中如何对两个数字的二进制执行AND、OR、XOR按位运算
问题原因
你代码的核心问题是AND运算的循环中已经把输入的a、b两个变量逐次右移,最终两个值都变为0,后续执行OR、XOR运算时,操作的都是已经清零的变量,自然无法得到正确结果。
修正方案
每次做位运算前都重置为原始输入的数值即可,修改后代码如下:
# 输入后先保存原始数值,避免运算过程中被修改 a_original, b_original = int(input("Please enter the first number: ")), int(input("Please enter the second number: ")) m = "" n = "" p = "" print(sep="\n") print(bin(a_original), bin(b_original), sep="\n") print(sep="\n") length = max([len(bin(a_original)), len(bin(b_original))]) - 2 # AND # 每次运算前重置为原始值 a, b = a_original, b_original for i in range(length): if bin(a)[-1] == "1" and bin(b)[-1] == "1": m += "1" else: m += "0" a = a >> 1 b = b >> 1 print("0b" + m[::-1], "| AND") # OR # 每次运算前重置为原始值 a, b = a_original, b_original for i in range(length): if bin(a)[-1] == "1" or bin(b)[-1] == "1": n += "1" else: n += "0" a = a >> 1 b = b >> 1 print("0b" + n[::-1], "| OR") # XOR # 每次运算前重置为原始值 a, b = a_original, b_original for i in range(length): if bin(a)[-1] != bin(b)[-1]: p += "1" else: p += "0" a = a >> 1 b = b >> 1 print("0b" + p[::-1], "| XOR")
内容的提问来源于stack exchange,提问作者sada995
相关产品推荐
相关产品推荐

