Загрузка данных


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()