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


def direct(number: int, bits: int) -> str:
    if number > 0:
        return format(number, f"0{bits}b")
    magnitude = -number
    return "1" + format(magnitude, f"0{bits - 1}b")

def inverse(number: int, bits: int) -> str:
    return "1" + "".join("1" if b == "0" else "0" for b in direct(number, bits - 1)[1:])

def twos_complement(number: int, bits: int) -> str:
    return format(int(inverse(number, bits)) + 1, f"0{bits}b")

def num(positive: bool) -> (int, int):
    number = int(input("Введите пол. число: " if positive else "Введите отр. число: "))
    if positive:
        if number < 0: raise ValueError("Число должно быть положительным")
    else:
        if number > 0: raise ValueError("Число должно быть отрицательным")
    bits = int(input("Введите разрядность: "))
    return number, bits

def task1():
    number, bits = num(positive=True)
    print(direct(number, bits)) # 13 (8) -> 00001101

def task2():
    number, bits = num(positive=False)
    print(direct(number, bits)) # -13 (8) -> 10001101

def task3():
    number, bits = num(positive=False)
    print(inverse(number, bits)) # -13 (8) -> 11110010

def task4():
    number, bits = num(positive=False)
    print(twos_complement(number, bits)) # -13 (8) -> 11110011

match int(input("Номер задания: ")):
    case 1:
        task1()
    case 2:
        task2()
    case 3:
        task3()
    case 4:
        task4()