Двоичная арифметика python
У меня следующее задание: реализовать двоичную арифметику (сложение, вычитание, сравнение) на python без библиотек. Я реализовал сложение следующим образом:
number1 = str(input("Введите первое число в 2ой системе: "))
number2 = str(input("Введите второе число в 2ой системе: "))
intSum = int(number1, 2) + int(number2, 2)
result = bin(intSum)[2:]
print(result)
Загвоздка в том, что мне дана подсказка: "генерировать число с 7,8 разрядов и каждое число записывать в массивы А и В". Что мне нужно переделать? Я совсем не понимаю, чего от меня хотят в подсказке
Ответы (2 шт):
От вас хотят чтобы вы сами рализовали операции в двоичной арифметике, а не преобразовали число средствами питон. Т.е. нужно хранить число побитово (именно об этом требование "записывать в массивы") и с числами в таком представлении уже оперировать.
вы не первый, кто сегодня хочет двоичную арифметику на питоне :)
на счет вопроса - вам же сказано - хранить число в массиве и работать с массивом чисел 0/1, а вы считили - строку перевели в число, а потом обратно в строку
нет уж - делайте все до конца как требуется
# получить бинарное число в виде массива чисел (бит)
num1 = [*map(int, input("Введите первое число в 2ой системе: "))]
num2 = [*map(int, input("Введите второе число в 2ой системе: "))]
# перевернуть числа для удобства выполнения операций
num1 = num1[::-1]
num2 = num2[::-1]
# дополнить числа нулями
size = max(len(num1), len(num2))
num1 += [0] * (size - len(num1))
num2 += [0] * (size - len(num2))
# сложить 2 числа
overflow = 0
res = []
for obj in zip(num1, num2):
value = obj[0] + obj[1] + overflow
overflow = value // 2
res.append(value % 2)
# если флаг переполнения установлен - добавить бит в начало нового числа
if overflow == 1:
res.append(1)
# перевернуть число назад
res = res[::-1]
print(''.join(map(str, res)))