- Складывать и вычитать столбиком в любой системе счисления, с переносом и заёмом
- Умножать и делить двоичные числа, выполнять умножение на 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сумма цифр разряда и переноса
- 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. Ниже двоичное сложение показано столбиком.
111111
101101
+ 11011
----------
1001000Вычисли: 1) 101101₂ + 11011₂; 2) 3657₈ + 1426₈.
Показать решениеСкрыть решение
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 ✓
Вычисли: 1) 9AE₁₆ + 5C7₁₆; 2) 3421₅ + 2434₅.
Показать решениеСкрыть решение
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цифра вычитаемого
- bоснование системы
Самый частый случай в двоичной системе: 10₂ − 1₂ = 1₂, то есть 2 − 1 = 1.
Вычисли: 1) 101101₂ − 10110₂; 2) 5203₈ − 1647₈.
Показать решениеСкрыть решение
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₁₆.
Показать решениеСкрыть решение
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сдвиг (количество разрядов)
Общий вид десятичного правила 37·100 = 3700. В двоичной системе умножить на 2 — сдвинуть на один разряд влево, разделить на 2 — на один разряд вправо.
1) 1011₂ · 110₂
2) 10111₂ · 1000₂
3) Раздели 10111011₂ на 100₂: найди частное и остаток.
Показать решениеСкрыть решение
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₂
Показать решениеСкрыть решение
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
Показать решениеСкрыть решение
Сумма: 27 + 31 + 26 = 84.
84 = 64 + 16 + 4 = 2⁶ + 2⁴ + 2² = 1010100₂.
Правильный ответ: A) 1010100.
Запишите значение выражения 101₂ · 7₈ + 1F₁₆ в восьмеричной системе.
Показать решениеСкрыть решение
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слагаемые (целые числа без знака)
- nчисло битов в ячейке
- modостаток от деления
Если сумма не больше 2ⁿ − 1, переполнения нет и результат верный.
1) В 8-битной ячейке складывают 11001000₂ + 01100100₂. Какое число останется в ячейке?
2) В 4-битной ячейке складывают 1011₂ + 0111₂. Каков результат?
Показать решениеСкрыть решение
2) 11 + 7 = 18 > 15: 10010₂ → пятый бит теряется, в ячейке остаётся 0010₂ = 2 = 18 − 16.
В Python int(s, b) переводит запись в системе с основанием b в десятичное число, а bin(), oct(), hex() — обратно, так что любой ответ проверяется парой строк. Целые числа Python не переполняются, поэтому 8-битную ячейку имитируем через % 256:
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.