Перейти к содержанию
Educora
Средний8 класс22 мин16 / 59

Арифметические действия в различных системах счисления

Научись складывать, вычитать, умножать и делить столбиком в двоичной, восьмеричной, шестнадцатеричной и любой другой системе, проверять результат в десятичной, вычислять выражения с разными основаниями и понимать переполнение n-битной ячейки.

Проверь себя
В этом уроке ты узнаешь
  • Складывать и вычитать столбиком в любой системе счисления, с переносом и заёмом
  • Умножать и делить двоичные числа, выполнять умножение на 2ᵏ как сдвиг
  • Вычислять выражения с числами в разных системах и проверять результат в десятичной
  • Объяснять переполнение n-битной ячейки и находить сохранённый результат

Когда в школе пишут 9 + 1 = 10, на самом деле разряд единиц заполняется и 1 переходит в разряд десятков. В двоичной системе разряд заполняется быстрее: 1 + 1 = 10₂. Процессор компьютера выполняет все вычисления в двоичной системе — именно по правилу сложения столбиком. На этом уроке перенесём действия столбиком на любое основание: единственное отличие в том, что разряд заполняется не на 10, а на b. Переводить числа мы научились на уроке «Восьмеричная и шестнадцатеричная системы счисления»; теперь будем считать с ними напрямую.

Сложение столбиком: перенос

Сложение выполняется, как в десятичной системе: справа налево, по разрядам. Если сумма s в разряде меньше основания (s < b), её записывают как есть. Если s ≥ b, в разряд пишут s − b, а 1 переносят в следующий разряд. Вся таблица сложения двоичной системы — четыре строки: 0 + 0 = 0, 0 + 1 = 1, 1 + 1 = 10₂, 1 + 1 + 1 = 11₂.

s = q·b + r → в разряд пишем r, q переносим в следующий разряд
где:
  • sсумма цифр разряда и переноса
  • bоснование системы
  • rзаписываемая цифра, 0 ≤ r ≤ b − 1
  • qперенос

При сложении s ≤ 2(b − 1) + 1, поэтому перенос всегда 0 или 1; при умножении q может быть больше.

Почему именно так? Когда в разряде набирается b единиц, вместе они равны ровно 1 единице следующего разряда, ведь вес каждого разряда в b раз больше веса правого соседа. Например, в восьмеричной системе 13 единиц в младшем разряде = 8 + 5: восемь переходят в следующий разряд как 1, а 5 остаётся. Десятичное правило «1 пишем в уме» — это случай b = 10. Ниже двоичное сложение показано столбиком.

Text
   111111 
    101101
+    11011
----------
   1001000
101101₂ + 11011₂ столбиком. Верхняя строка — переносы.
Двоичное и восьмеричное сложение

Вычисли: 1) 101101₂ + 11011₂; 2) 3657₈ + 1426₈.

Показать решение
1) Справа налево:
1 + 1 = 10₂ → пишем 0, 1 переносим
0 + 1 + 1 = 10₂ → 0, перенос 1
1 + 0 + 1 = 10₂ → 0, перенос 1
1 + 1 + 1 = 11₂ → 1, перенос 1
0 + 1 + 1 = 10₂ → 0, перенос 1
1 + 0 + 1 = 10₂ → 0, перенос 1
Последний перенос пишем слева: 1001000₂. Проверка: 45 + 27 = 72 = 64 + 8 ✓
2) 7 + 6 = 13 = 8 + 5 → 5, перенос 1
5 + 2 + 1 = 8 = 8 + 0 → 0, перенос 1
6 + 4 + 1 = 11 = 8 + 3 → 3, перенос 1
3 + 1 + 1 = 5 → 5
Ответ: 5305₈. Проверка: 1967 + 790 = 2757 = 5·512 + 3·64 + 0·8 + 5 ✓
Шестнадцатеричное и 5-ричное сложение

Вычисли: 1) 9AE₁₆ + 5C7₁₆; 2) 3421₅ + 2434₅.

Показать решение
1) E + 7 = 14 + 7 = 21 = 16 + 5 → 5, перенос 1
A + C + 1 = 10 + 12 + 1 = 23 = 16 + 7 → 7, перенос 1
9 + 5 + 1 = 15 = F
Ответ: F75₁₆. Проверка: 2478 + 1479 = 3957 = 15·256 + 7·16 + 5 ✓
2) 1 + 4 = 5 = 5 + 0 → 0, перенос 1
2 + 3 + 1 = 6 = 5 + 1 → 1, перенос 1
4 + 4 + 1 = 9 = 5 + 4 → 4, перенос 1
3 + 2 + 1 = 6 = 5 + 1 → 1, перенос 1
Ответ: 11410₅. Проверка: 486 + 369 = 855 = 625 + 125 + 100 + 5 ✓

Вычитание столбиком: заём

Если при вычитании верхняя цифра меньше нижней, из соседнего левого разряда занимают 1. В десятичной системе эта единица равна 10, а в системе с основанием b — b единицам: 2 в двоичной, 8 в восьмеричной, 16 в шестнадцатеричной. Если в соседнем разряде 0, занимают из разряда левее, и все нули по пути превращаются в b − 1 — как 1000 − 1 = 999 в десятичной системе.

если a < c: цифра = a + b − c, левый разряд уменьшается на 1
где:
  • aцифра уменьшаемого
  • cцифра вычитаемого
  • bоснование системы

Самый частый случай в двоичной системе: 10₂ − 1₂ = 1₂, то есть 2 − 1 = 1.

Двоичное и восьмеричное вычитание

Вычисли: 1) 101101₂ − 10110₂; 2) 5203₈ − 1647₈.

Показать решение
1) Справа налево:
1 − 0 = 1
0 − 1: занимаем у левой единицы: 2 − 1 = 1
0 − 1 (этот разряд отдал 1, в нём 0): снова заём, 2 − 1 = 1
0 − 0 = 0 (разряд отдал 1)
0 − 1: заём, 2 − 1 = 1
0 − 0 = 0 (разряд отдал 1)
Ответ: 10111₂. Проверка: 45 − 22 = 23 = 16 + 4 + 2 + 1 ✓
2) 3 − 7: в соседнем разряде 0, занимаем у 2: 2 → 1, 0 → 7, правому разряду достаётся 8: 3 + 8 − 7 = 4
7 − 4 = 3
1 − 6: занимаем у 5: 1 + 8 − 6 = 3, 5 → 4
4 − 1 = 3
Ответ: 3334₈. Проверка: 2691 − 935 = 1756 = 3·512 + 3·64 + 3·8 + 4 ✓
Шестнадцатеричное вычитание

Вычисли: A03₁₆ − 4F8₁₆.

Показать решение
3 − 8: в соседнем разряде 0, занимаем у A: A → 9, 0 → F (= 16 − 1), правому разряду достаётся 16: 3 + 16 − 8 = 11 = B
F − F = 0
9 − 4 = 5
Ответ: 50B₁₆. Проверка: 2563 − 1272 = 1291 = 5·256 + 0·16 + 11 ✓

Умножение и деление

Таблица умножения двоичной системы самая простая: 0·0 = 0·1 = 1·0 = 0, 1·1 = 1. Поэтому двоичное умножение — это сдвиги и сложение: для каждой единицы второго множителя первый множитель записывают со сдвигом влево на соответствующий разряд, затем строки складывают. В других системах умножение столбиком выполняется как в десятичной, только перенос находят делением на b. Деление уголком тоже выполняется как обычно; в двоичной системе каждая цифра частного — 0 или 1. Почему сдвиг — это умножение? При сдвиге на разряд влево каждая цифра попадает в разряд, вес которого в b раз больше, значит, всё число умножается на b.

N·bᵏ: справа приписываем k нулей; N : bᵏ: отбрасываем последние k цифр — это остаток
где:
  • Nчисло, записанное в системе с основанием b
  • kсдвиг (количество разрядов)

Общий вид десятичного правила 37·100 = 3700. В двоичной системе умножить на 2 — сдвинуть на один разряд влево, разделить на 2 — на один разряд вправо.

Двоичное умножение и деление

1) 1011₂ · 110₂
2) 10111₂ · 1000₂
3) Раздели 10111011₂ на 100₂: найди частное и остаток.

Показать решение
1) Единицы числа 110₂ стоят во втором и третьем разрядах, поэтому сдвигаем 1011₂ на один и на два разряда влево и складываем: 10110₂ + 101100₂ = 1000010₂. Проверка: 11·6 = 66 = 64 + 2 ✓
2) 1000₂ = 2³ → приписываем три нуля: 10111000₂ (23·8 = 184 ✓).
3) 100₂ = 2² → последние две цифры — остаток: частное 101110₂ = 46, остаток 11₂ = 3. Проверка: 4·46 + 3 = 187 = 10111011₂ ✓
Восьмеричное умножение и двоичное деление

1) 47₈ · 6₈
2) 110110₂ : 110₂

Показать решение
1) 7·6 = 42 = 5·8 + 2 → пишем 2, переносим 5
4·6 + 5 = 29 = 3·8 + 5 → пишем 5, переносим 3
Ответ: 352₈. Проверка: 39·6 = 234 = 3·64 + 5·8 + 2 ✓
2) Слева: 110 ≥ 110 → в частное 1, остаток 0; сносим следующую цифру: 1 < 110 → 0; 11 < 110 → 0; 110 → 1, остаток 0.
Частное 1001₂. Проверка: 54 : 6 = 9 ✓

Выражения с разными основаниями и проверка

В заданиях ГЭЦ часто дают выражение с числами в разных системах и просят ответ в определённой системе. Самый надёжный путь: перевести все числа в десятичную систему, вычислить и перевести результат в нужную систему. Если основания 2, 8 и 16, можно перевести всё в двоичную и сложить там. Проверка выбранного варианта переводом в десятичную занимает минуту и ловит ошибки.

Закрытое задание в стиле ГЭЦ

Запишите значение выражения 11011₂ + 37₈ + 1A₁₆ в двоичной системе.
A) 1010100 B) 1001100 C) 1010010 D) 1100100 E) 1010110

Показать решение
В десятичную: 11011₂ = 16 + 8 + 2 + 1 = 27; 37₈ = 3·8 + 7 = 31; 1A₁₆ = 16 + 10 = 26.
Сумма: 27 + 31 + 26 = 84.
84 = 64 + 16 + 4 = 2⁶ + 2⁴ + 2² = 1010100₂.
Правильный ответ: A) 1010100.
Кодируемое задание (запиши ответ)

Запишите значение выражения 101₂ · 7₈ + 1F₁₆ в восьмеричной системе.

Показать решение
101₂ = 5, 7₈ = 7, 1F₁₆ = 16 + 15 = 31.
5·7 + 31 = 66.
66 : 8 = 8, остаток 2; 8 : 8 = 1, остаток 0; 1 : 8 = 0, остаток 1 → 102₈. Проверка: 64 + 0 + 2 = 66 ✓

Переполнение n-битной ячейки

Компьютер хранит число в ячейке памяти фиксированной длины. В n битах помещаются числа от 0 до 2ⁿ − 1: в 8 битах — 0…255, в 16 битах — 0…65535. Когда сумма выходит за этот предел, самый левый перенос не помещается в ячейку и теряется — это переполнение. В ячейке остаётся остаток от деления суммы на 2ⁿ, и программа видит неожиданно маленькое число.

хранимый результат = (a + c) mod 2ⁿ
где:
  • a, cслагаемые (целые числа без знака)
  • nчисло битов в ячейке
  • modостаток от деления

Если сумма не больше 2ⁿ − 1, переполнения нет и результат верный.

Переполнение

1) В 8-битной ячейке складывают 11001000₂ + 01100100₂. Какое число останется в ячейке?
2) В 4-битной ячейке складывают 1011₂ + 0111₂. Каков результат?

Показать решение
1) 200 + 100 = 300 > 255 — переполнение. Столбиком: 11001000₂ + 01100100₂ = 100101100₂; девятый бит теряется, в ячейке остаётся 00101100₂ = 44. Проверка: 300 − 256 = 44 ✓
2) 11 + 7 = 18 > 15: 10010₂ → пятый бит теряется, в ячейке остаётся 0010₂ = 2 = 18 − 16.
Интерактив
Загрузка симуляции…
Сделай число 255 (все биты — единицы) и нажми «Прибавить 1»: 8 битов переполнятся, и счёт начнётся с 0.

В Python int(s, b) переводит запись в системе с основанием b в десятичное число, а bin(), oct(), hex() — обратно, так что любой ответ проверяется парой строк. Целые числа Python не переполняются, поэтому 8-битную ячейку имитируем через % 256:

Python
a = int('101101', 2) + int('11011', 2)
print(a, bin(a))
b = int('3657', 8) + int('1426', 8)
print(b, oct(b))
c = int('A03', 16) - int('4F8', 16)
print(c, hex(c))
print((200 + 100) % 256)
▸ Ожидаемый результат
72 0b1001000
2757 0o5305
1291 0x50b
44

На этом уроке основание всегда было известно. На уроке «Системы счисления: задачи с неизвестным основанием» будем решать обратную задачу — находить основание по равенству; именно таковы многие кодируемые задания ГЭЦ.

Главное

  • Действия столбиком в любой системе выполняются по тем же правилам, только разряд заполняется на b: если s ≥ b, пишем s − b и переносим 1.
  • Занятая единица равна b: 2 в двоичной, 8 в восьмеричной, 16 в шестнадцатеричной системе.
  • Двоичное умножение = сдвиги + сложение; умножить на bᵏ — приписать k нулей, разделить на bᵏ — отбросить k последних цифр (остаток).
  • Выражение с разными основаниями вычисляй в десятичной системе, результат переводи в нужную систему и проверяй.
  • В n-битной ячейке остаётся (a + c) mod 2ⁿ; сумма больше 2ⁿ − 1 вызывает переполнение.

Проверь себя

Вопросов: 12. Каждый правильный ответ приносит XP.

1 / 12
Как записывается сумма 1 + 1 + 1 в двоичной системе?