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