def to_binary(number: int, bits: int) -> str:
return format(number % (2 ** bits), f"0{bits}b")
def from_binary(code: str) -> int:
value = int(code, 2)
return value - 2 ** len(code) if code[0] == "1" else value
def add_binary(a: str, b: str) -> (int, bool):
bits = len(a)
result = format((int(a, 2) + int(b, 2)) % (2 ** bits), f"0{bits}b")
overflow = a[0] == b[0] != result[0]
return result, overflow
def negate_binary(code: str) -> str:
bits = len(code)
inverted = "".join("1" if b == "0" else "0" for b in code)
return format((int(inverted, 2) + 1) % (2 ** bits), f"0{bits}b")
def read_ints() -> (int, int, int):
a = int(input("Введите певрое число: "))
b = int(input("Введите второе число: "))
bits = int(input("Введите битность: "))
return a, b, bits
def task1():
a, b, bits = read_ints()
res, _ = add_binary(to_binary(a, bits), to_binary(b, bits))
print(f"Сумма: {res}, десятичная: {from_binary(res)}")
def task2():
a, b, bits = read_ints()
res, _ = add_binary(to_binary(a, bits), negate_binary(to_binary(b, bits)))
print(f"Разность: {res}, десятичная: {from_binary(res)}")
def task3():
a, b, bits = read_ints()
res, overflow = add_binary(to_binary(a, bits), to_binary(b, bits))
print(f"Сумма: {res}, десятичная: {from_binary(res)}, переполнение: {overflow}")
def task4():
for bits in [8, 16, 32, 64, 128]:
print(f"Разрядность {bits} -> {-2 ** (bits - 1)} .. {2 ** (bits - 1) - 1}")
match int(input("Введите номер задания: ")):
case 1:
task1()
case 2:
task2()
case 3:
task3()
case 4:
task4()