8-916-722-04-28ТелВКонтактеВКTelegramTgMAXMAX Пробный урокПробный урок

Сложение, вычитание и умножение чисел в двоичной системе, арифметика в других основаниях

Арифметика в позиционных системах: общий принцип

Правила выполнения арифметических операций «в столбик», знакомые нам по десятичной системе счисления, полностью применимы и к любой другой позиционной системе — двоичной, восьмеричной, шестнадцатеричной. Единственное отличие: перенос в следующий разряд при сложении (или заём из следующего разряда при вычитании) происходит не тогда, когда сумма цифр достигает 10, а тогда, когда она достигает основания системы q. В двоичной системе, где q=2, перенос возникает уже при сумме двух единиц.

Таблицы сложения и умножения в двоичной системе

Так как в двоичной системе используются только цифры 0 и 1, таблицы сложения и умножения однозначных чисел здесь предельно просты и их удобно представить полностью:

Слагаемые / множителиСложениеУмножение
0 и 00+0=00·0=0
0 и 10+1=10·1=0
1 и 01+0=11·0=0
1 и 11+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 записывается в новый, пятый разряд результата.

10112+11012=110002

Проверка. В десятичной системе: 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.

11012−10112=00102

Проверка. В десятичной системе: 1101₂=13, 1011₂=11, их разность 13−11=2; 0010₂=2 — результат совпадает.

Умножение двоичных чисел

Умножение многоразрядных двоичных чисел, как и в десятичной системе, сводится к умножению множимого на каждую цифру множителя (с учётом сдвига на соответствующее число разрядов) и последующему сложению полученных промежуточных произведений. Поскольку цифры двоичной системы — только 0 и 1, умножение на каждую отдельную цифру множителя особенно просто: умножение на 1 просто переписывает множимое (со сдвигом), а умножение на 0 даёт строку нулей, которую можно не учитывать при сложении.

Пример 3. Умножение двоичных чисел

Дано: вычислите произведение 101₂ · 11₂.

Решение. Множитель 11₂ состоит из двух единичных цифр, поэтому промежуточных произведений два: умножение 101₂ на младшую единицу множителя даёт 101₂ без сдвига, умножение на старшую единицу — 101₂ со сдвигом на один разряд влево, то есть 1010₂. Складываем оба промежуточных результата:

1012+10102=11112

1012·112=11112

Проверка. В десятичной системе: 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, как по привычке из десятичной арифметики). Третья ошибка — при умножении в столбик забывать о сдвиге промежуточных произведений на соответствующее число разрядов влево при умножении на каждую следующую (более старшую) цифру множителя, из-за чего итоговая сумма промежуточных произведений считается неверно.

Краткий словарь терминов

Перенос — единица, добавляемая к следующему, более старшему разряду при сложении, если сумма цифр текущего разряда достигает основания системы счисления.

Заём — единица, занимаемая у следующего, более старшего разряда при вычитании, если цифра вычитаемого больше цифры уменьшаемого в текущем разряде.

Промежуточное произведение — результат умножения множимого на одну цифру множителя (со сдвигом на соответствующее число разрядов) при умножении столбиком.

Основание системы счисления — число, при достижении которого суммой цифр разряда происходит перенос в следующий разряд.

Двоичная арифметика — выполнение арифметических операций над числами, записанными в двоичной системе счисления.

Заключение

Арифметические операции в любой позиционной системе счисления подчиняются единому алгоритму столбика, знакомому из десятичной арифметики, — различие лишь в том, при какой сумме цифр происходит перенос в следующий разряд. Двоичная арифметика особенно проста благодаря тому, что использует всего две цифры, и именно поэтому она лежит в основе работы арифметико-логических устройств компьютера. В следующей теме мы рассмотрим, как отрицательные и вещественные числа фактически хранятся в памяти компьютера — с помощью дополнительного кода и формата чисел с плавающей точкой.

Запишитесь на бесплатный урок

Определим уровень, покажем формат занятий и составим план подготовки.