def binary_to_decimal(binary_str):
try:
return int(binary_str, 2)
except ValueError:
return None
def decimal_to_binary(decimal_num):
if isinstance(decimal_num, int):
return bin(decimal_num)[2:]
else:
#extra credit
fractional_part = decimal_num - int(decimal_num)
binary_fraction = ""
while fractional_part and len(binary_fraction) < 10:
fractional_part *= 2
bit = int(fractional_part)
binary_fraction += str(bit)
fractional_part -= bit
return bin(int(decimal_num))[2:] + "." + binary_fraction
def add_binary(b1, b2):
return bin(binary_to_decimal(b1) + binary_to_decimal(b2))[2:]
def subtract_binary(b1, b2):
return bin(binary_to_decimal(b1) - binary_to_decimal(b2))[2:]
def multiply_binary(b1, b2):
return bin(binary_to_decimal(b1) * binary_to_decimal(b2))[2:]
def divide_binary(b1, b2):
denominator = binary_to_decimal(b2)
if denominator == 0:
return "Error: Division by zero"
return bin(binary_to_decimal(b1) // denominator)[2:]
def calculator():
print("Welcome to the Binary Calculator!")
print("Options: add, subtract, multiply, divide, bin2dec, dec2bin")
while True:
choice = input("Enter operation (or 'exit' to quit): ").lower()
if choice == 'exit':
print("Goodbye!")
break
if choice in ['add', 'subtract', 'multiply', 'divide']:
b1 = input("Enter first binary number: ")
b2 = input("Enter second binary number: ")
if binary_to_decimal(b1) is None or binary_to_decimal(b2) is None:
print("Invalid binary input.")
continue
if choice == 'add':
print("Result:", add_binary(b1, b2))
elif choice == 'subtract':
print("Result:", subtract_binary(b1, b2))
elif choice == 'multiply':
print("Result:", multiply_binary(b1, b2))
elif choice == 'divide':
print("Result:", divide_binary(b1, b2))
elif choice == 'bin2dec':
b = input("Enter binary number: ")
result = binary_to_decimal(b)
if result is not None:
print("Decimal:", result)
else:
print("Invalid binary number.")
elif choice == 'dec2bin':
d = input("Enter decimal number: ")
try:
d = float(d)
print("Binary:", decimal_to_binary(d))
except ValueError:
print("Invalid decimal input.")
else:
print("Unknown operation.")