Сложение, вычитание и умножение чисел в двоичной системе, арифметика в других основаниях
Арифметика в позиционных системах: общий принцип
Правила выполнения арифметических операций «в столбик», знакомые нам по десятичной системе счисления, полностью применимы и к любой другой позиционной системе — двоичной, восьмеричной, шестнадцатеричной. Единственное отличие: перенос в следующий разряд при сложении (или заём из следующего разряда при вычитании) происходит не тогда, когда сумма цифр достигает 10, а тогда, когда она достигает основания системы q. В двоичной системе, где q=2, перенос возникает уже при сумме двух единиц.
Таблицы сложения и умножения в двоичной системе
Так как в двоичной системе используются только цифры 0 и 1, таблицы сложения и умножения однозначных чисел здесь предельно просты и их удобно представить полностью:
| Слагаемые / множители | Сложение | Умножение |
|---|---|---|
0 и 0 | 0+0=0 | 0·0=0 |
0 и 1 | 0+1=1 | 0·1=0 |
1 и 0 | 1+0=1 | 1·0=0 |
1 и 1 | 1+1=10 (перенос 1) | 1·1=1 |
Ключевой случай — сложение 1+1: в десятичной записи это 2, а в двоичной 2=10₂, то есть в текущий разряд записывается 0, а 1 переносится в следующий, старший разряд — точно так же, как при сложении 5+5=10 в десятичной системе цифра 0 остаётся на месте, а 1 переносится левее.
Сложение двоичных чисел в столбик
Сложение многоразрядных двоичных чисел выполняется столбиком справа налево, разряд за разрядом, с учётом возможного переноса из предыдущего (более младшего) разряда: к цифрам обоих чисел в данном разряде прибавляется перенос (0 или 1), после чего по таблице сложения определяется цифра результата и новый перенос в следующий разряд.
Пример 1. Сложение двоичных чисел
Дано: сложите числа 1011₂ и 1101₂ в столбик.
Решение. Складываем разряд за разрядом справа налево:
Разряд 0 (крайний правый): 1+1=10, пишем 0, перенос 1. Разряд 1: 1+0+перенос 1=10, пишем 0, перенос 1. Разряд 2: 0+1+перенос 1=10, пишем 0, перенос 1. Разряд 3: 1+1+перенос 1=11, пишем 1, перенос 1. Переноса из старшего разряда больше нет, поэтому финальный перенос 1 записывается в новый, пятый разряд результата.
Проверка. В десятичной системе: 1011₂=11, 1101₂=13, их сумма 11+13=24; переведём 11000₂ в десятичную систему: 16+8=24 — результат совпадает.
Вычитание двоичных чисел
Вычитание в столбик выполняется аналогично десятичному: разряд за разрядом справа налево, а если цифра вычитаемого больше цифры уменьшаемого в данном разряде, выполняется заём — единица занимается у соседнего старшего разряда, что равносильно добавлению основания системы (для двоичной — числа 2) к цифре уменьшаемого в текущем разряде.
Пример 2. Вычитание двоичных чисел
Дано: вычислите разность 1101₂ − 1011₂.
Решение. Вычитаем разряд за разрядом справа налево. Разряд 0: 1−1=0. Разряд 1: 0−1 — вычитаемое больше, занимаем 1 у соседнего разряда: (2+0)−1=1, при этом уменьшаемое разряда 2 уменьшается на 1. Разряд 2: было 1, после займа стало 0; 0−0=0. Разряд 3: 1−1=0.
Проверка. В десятичной системе: 1101₂=13, 1011₂=11, их разность 13−11=2; 0010₂=2 — результат совпадает.
Умножение двоичных чисел
Умножение многоразрядных двоичных чисел, как и в десятичной системе, сводится к умножению множимого на каждую цифру множителя (с учётом сдвига на соответствующее число разрядов) и последующему сложению полученных промежуточных произведений. Поскольку цифры двоичной системы — только 0 и 1, умножение на каждую отдельную цифру множителя особенно просто: умножение на 1 просто переписывает множимое (со сдвигом), а умножение на 0 даёт строку нулей, которую можно не учитывать при сложении.
Пример 3. Умножение двоичных чисел
Дано: вычислите произведение 101₂ · 11₂.
Решение. Множитель 11₂ состоит из двух единичных цифр, поэтому промежуточных произведений два: умножение 101₂ на младшую единицу множителя даёт 101₂ без сдвига, умножение на старшую единицу — 101₂ со сдвигом на один разряд влево, то есть 1010₂. Складываем оба промежуточных результата:
Проверка. В десятичной системе: 101₂=5, 11₂=3, произведение 5·3=15; 1111₂=8+4+2+1=15 — результат совпадает.
Арифметика в восьмеричной и шестнадцатеричной системах
Принцип выполнения операций в восьмеричной и шестнадцатеричной системах точно такой же, как и в двоичной, только перенос (заём) возникает при достижении суммой соответствующего основания — 8 или 16. Например, в восьмеричной системе 7₈+6₈: в десятичной системе 7+6=13, а 13 в восьмеричной записи — это 15₈ (1·8+5=13), поэтому в текущий разряд пишется 5, а 1 переносится в следующий разряд. В шестнадцатеричной системе аналогично A₁₆+7₁₆ (10+7=17 в десятичной; 17=16+1, то есть 11₁₆): в текущий разряд пишется 1, перенос — 1.
Программная иллюстрация: сложение двоичных чисел столбиком
Рассмотрим программу на Python, которая реализует сложение двух двоичных чисел, заданных строками, «школьным» способом столбиком (без использования встроенного перевода в десятичную систему), и сверяет результат со встроенной функцией bin().
def add_binary(a: str, b: str) -> str:
"""Складывает два двоичных числа-строки столбиком, справа налево."""
a, b = a[::-1], b[::-1]
result = []
carry = 0
for i in range(max(len(a), len(b))):
bit_a = int(a[i]) if i < len(a) else 0
bit_b = int(b[i]) if i < len(b) else 0
total = bit_a + bit_b + carry
result.append(str(total % 2))
carry = total // 2
if carry:
result.append(str(carry))
return "".join(reversed(result))
print(add_binary("1011", "1101")) # 11000
print(bin(11 + 13)) # проверка: 0b11000
Функция add_binary на каждом шаге цикла складывает соответствующие биты обоих чисел вместе с переносом carry из предыдущего разряда, записывает остаток от деления суммы на 2 как цифру результата, а целую часть от деления — как новый перенос; это в точности алгоритм, разобранный в примере 1.
Типичные ошибки
Частая ошибка — забывать про перенос при сложении 1+1 в двоичной системе, записывая результат как «2» вместо правильного «0 с переносом 1». Вторая ошибка — при вычитании неверно выполнять заём: нужно занимать именно основание системы (2 для двоичной, а не 10, как по привычке из десятичной арифметики). Третья ошибка — при умножении в столбик забывать о сдвиге промежуточных произведений на соответствующее число разрядов влево при умножении на каждую следующую (более старшую) цифру множителя, из-за чего итоговая сумма промежуточных произведений считается неверно.
Краткий словарь терминов
Перенос — единица, добавляемая к следующему, более старшему разряду при сложении, если сумма цифр текущего разряда достигает основания системы счисления.
Заём — единица, занимаемая у следующего, более старшего разряда при вычитании, если цифра вычитаемого больше цифры уменьшаемого в текущем разряде.
Промежуточное произведение — результат умножения множимого на одну цифру множителя (со сдвигом на соответствующее число разрядов) при умножении столбиком.
Основание системы счисления — число, при достижении которого суммой цифр разряда происходит перенос в следующий разряд.
Двоичная арифметика — выполнение арифметических операций над числами, записанными в двоичной системе счисления.
Заключение
Арифметические операции в любой позиционной системе счисления подчиняются единому алгоритму столбика, знакомому из десятичной арифметики, — различие лишь в том, при какой сумме цифр происходит перенос в следующий разряд. Двоичная арифметика особенно проста благодаря тому, что использует всего две цифры, и именно поэтому она лежит в основе работы арифметико-логических устройств компьютера. В следующей теме мы рассмотрим, как отрицательные и вещественные числа фактически хранятся в памяти компьютера — с помощью дополнительного кода и формата чисел с плавающей точкой.



