import tkinter as tk
def binary_addition(a, b):
carry = 0
result = “”
length = max(len(a), len(b))
a = a.zfill(length)
b = b.zfill(length)
for i in range(length - 1, -1, -1):
sum_bits = int(a[i]) + int(b[i]) + carry
result = str(sum_bits % 2) + result
carry = sum_bits // 2
return result if carry == 0 else str(carry) + result
def binary_subtraction(a, b):
n = len(a)
m = len(b)
if n < m:
a = ‘0’ * (m - n) + a
elif m < n:
b = ‘0’ * (n - m) + b
borrow = 0
result = “”
for i in range(len(a) - 1, -1, -1):
diff = int(a[i]) - int(b[i]) - borrow
if diff < 0:
diff += 2
borrow = 1
else:
borrow = 0
result = str(diff) + result
return result.lstrip(‘0’) or ‘0’
def binary_multiplication(a, b):
result = “0”
for i in range(len(b) - 1, -1, -1):
if b[i] == ‘1’:
temp = a
else:
temp = “0” * len(a)
result = binary_addition(result, temp + “0” * (len(b) - 1 - i))
return result
def binary_division(a, b):
if b == “0”:
return “Error: Division by zero”
quotient = “0”
remainder = a
while len(remainder) >= len(b):
temp = b + “0” * (len(remainder) - len(b))
if remainder[0] == ‘1’ or remainder >= temp:
remainder = binary_subtraction(remainder, temp)
quotient = binary_addition(quotient, “1” + “0” * (len(remainder) - len(b)))
else:
quotient = quotient + “0”
return quotient, remainder
def calculate():
num1 = bin_entry1.get()
num2 = bin_entry2.get()
operation = operation_var.get()
if not all(char in ‘01’ for char in num1) or not all(char in ‘01’ for char in num2):
result_label.config(text=“输入必须是二进制数”)
return
if operation == “+”:
result_label.config(text=binary_addition(num1, num2))
elif operation == “-”:
result_label.config(text=binary_subtraction(num1, num2))
elif operation == “*”:
result_label.config(text=binary_multiplication(num1, num2))
elif operation == “/”:
quotient, remainder = binary_division(num1, num2)
result_label.config(text=f"商:{quotient},余数:{remainder}")
root = tk.Tk()
root.title(“二进制计算器”)
bin_label1 = tk.Label(root, text=“二进制数 1:”,width=10, height=10)
bin_label1.grid(row=0, column=0, padx=10, pady=10)
bin_entry1 = tk.Entry(root)
bin_entry1.grid(row=0, column=1, padx=10, pady=10)
operation_var = tk.StringVar()
operation_var.set("+")
operation_menu = tk.OptionMenu(root, operation_var, “+”, “-”, “*”, “/”)
operation_menu.grid(row=1, column=0, padx=10, pady=10)
bin_label2 = tk.Label(root, text=“二进制数 2:”,width=10, height=10)
bin_label2.grid(row=1, column=1, padx=10, pady=10)
bin_entry2 = tk.Entry(root)
bin_entry2.grid(row=1, column=2, padx=10, pady=10)
calculate_button = tk.Button(root, text="=", command=calculate)
calculate_button.grid(row=2, column=1, padx=10, pady=10)
result_label = tk.Label(root, text="")
result_label.grid(row=3, column=1, padx=10, pady=10)
root.mainloop()