ЕГЭ · Информатика · Кодирование информации и системы счисления
Позиционные системы счисления
Понять, что такое основание системы и как из него собирается число.
🎯 ЕГЭ информатика: задания 4, 7, 11, 14. №4 — кодирование, условие Фано; №7 — измерение информации: графика и звук; №11 — кодирование: объём памяти; №14 — системы счисления.
- ⚠Забывают признак делимости на основание (число нулей на конце записи)
- ⚠Путают перевод дробной части с переводом целой
Зачем системы счисления на экзамене
Системы счисления — самая «сквозная» тема информатики: она появляется в четырёх разных линиях ЕГЭ, и в трёх из них её присутствие неочевидно.
Линия 14 — прямо про них: «значение выражения записали в системе счисления с основанием 9, сколько цифр 8 в записи».
Линия 8 — про слова, но слово из отсортированного алфавита это число в системе с основанием, равным размеру алфавита, и номер слова считается ровно как значение такого числа.
Линия 5 — исполнитель, который приписывает к двоичной записи числа разряды в зависимости от делимости. Без свободного перевода туда-обратно задание не решается.
Линии 7 и 11 — объём данных: там всё меряется степенями двойки, и переводы Кбайт → байт → бит это те же переходы между разрядами.
Поэтому тему стоит освоить до автоматизма: не «уметь перевести с подсказкой», а переводить быстро и в обе стороны, понимая, откуда берётся каждый шаг. В этом уроке — механика переводов с полными трассировками, программные способы и арифметика прямо в двоичной системе.
Определение
Позиционная система — значение цифры зависит от её позиции. Основание p показывает, сколько разрешено цифр: от 0 до p−1 (в 16-ричной добавляют A=10 … F=15).
| Формула | число = Σ (цифра × pномерразряда), разряды справа налево с 0 |
|---|---|
| Пример 725₈ | 7·8² + 2·8¹ + 5·8⁰ = 448+16+5 = 469 |
Перевод из десятичной в p-ичную (деление с остатком)
• Дели число на основание p, записывай остаток.
• Частное снова дели на p, и так до нуля.
• Остатки, выписанные снизу вверх, дают запись числа.
• Пример: 100 → в 8-ричную: остатки 4,4,1 → 144₈. Проверка 1·64+4·8+4=100.
Разбор примера
Перевод 3B(16) в десятичную
Перевести шестнадцатеричное число 3B в десятичную систему.
Показать решение по шагам
- 1. Определяем цифры: 3 — это 3, B — это 11.
- 2. Пишем веса разрядов: младший разряд 16⁰=1, старший 16¹=16.
- 3. Считаем: 3·16 + 11·1 = 48 + 11 = 59.
Ответ: 59(10)
Позиционные и непозиционные системы: в чём разница на самом деле
Система счисления — способ записи чисел с помощью знаков и правила, по которому знаки складываются в число.
Непозиционная система — та, в которой значение знака не зависит от его места в записи. Пример, который знают все, — римская: в записи XXX каждая X означает ровно десять, где бы она ни стояла.
Правда, и в римской системе есть след позиционности: в IX единица вычитается, а в XI прибавляется. Но «вес» самой буквы при этом не меняется — меняется только знак действия. Настоящая позиционность устроена иначе.
Позиционная система — та, в которой вклад цифры зависит от её позиции. В числе 555 три одинаковые цифры означают пятьсот, пятьдесят и пять.
Почему это важно практически: в непозиционной системе нельзя построить простой алгоритм сложения столбиком. Попробуйте перемножить MCMXLIV на XXVII — и станет понятно, почему европейская математика не двигалась, пока не приняла позиционную запись. Вычисления в римской системе делались не на бумаге, а на счётной доске — абаке.
Исторические системы, о которых полезно знать:
— вавилонская шестидесятеричная — позиционная, с основанием 60; её след живёт до сих пор в делении часа на 60 минут, минуты на 60 секунд и окружности на 360 градусов; — римская — непозиционная; — индийская десятичная с нулём — позиционная; через арабских математиков, в том числе аль-Хорезми, она пришла в Европу и вытеснила римскую.
Ключевым изобретением здесь был именно ноль как цифра: без знака «в этом разряде пусто» позиционная запись неоднозначна.
Развёрнутая форма записи — ключ ко всем переводам
Основание системы счисления — количество различных цифр, используемых для записи. В системе с основанием q цифры — это числа от 0 до q − 1. Отсюда сразу два правила проверки:
— в двоичной записи не может быть цифры 2, в восьмеричной — цифры 8; — наибольшая цифра всегда на единицу меньше основания.
Развёрнутая форма — запись числа как суммы произведений цифр на степени основания.
Например, 1011₂ означает 1·2³ + 0·2² + 1·2¹ + 1·2⁰ = 8 + 0 + 2 + 1 = 11₁₀.
А 3A₁₆ означает 3·16¹ + 10·16⁰ = 48 + 10 = 58₁₀. Здесь буква A обозначает десять: в шестнадцатеричной системе цифр шестнадцать, и после 9 идут A, B, C, D, E, F со значениями 10, 11, 12, 13, 14, 15.
Развёрнутая форма — это и есть способ перевода в десятичную систему: разложили и сложили.
Обратный перевод, из десятичной в систему с основанием q, выполняется делением с остатком: число делят на q, записывают остаток, частное снова делят на q, и так до нуля. Остатки, выписанные снизу вверх (от последнего к первому), и дают запись.
- • Переведём 25 в двоичную:
- • 25 : 2 = 12, остаток 1;
- • 12 : 2 = 6, остаток 0;
- • 6 : 2 = 3, остаток 0;
- • 3 : 2 = 1, остаток 1;
- • 1 : 2 = 0, остаток 1.
- • Читаем остатки снизу вверх: 11001₂. Проверка: 16 + 8 + 1 = 25.
Полезные ориентиры, которые экономят время на экзамене. Степени двойки до 210 надо знать наизусть: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024. Число, равное степени двойки, в двоичной записи выглядит как единица и нули; число вида 2k − 1 — как k единиц подряд. Эти два факта решают половину задач на двоичную запись без вычислений.
Вопрос на проверку
Сколько различных цифр используется в системе счисления с основанием 5?
Ответить и проверить себя — после бесплатной регистрации.
Вопрос на проверку
Чему равно двоичное число 1011 в десятичной системе?
Ответить и проверить себя — после бесплатной регистрации.
Перевод в обе стороны: две трассировки
Из p-ичной в десятичную: схема Горнера
Прямой способ — развёрнутая форма: сложить произведения цифр на веса разрядов. Для 725₈ это 7·64 + 2·8 + 5 = 469.
Есть способ короче, и он же лежит в основе программного перевода. Называется он схемой Горнера: идём по цифрам слева направо, на каждом шаге умножая накопленное на основание и прибавляя очередную цифру.
Для 725₈: начинаем с нуля. 0 · 8 + 7 = 7. Затем 7 · 8 + 2 = 58. Затем 58 · 8 + 5 = 469. Тот же ответ, но без возведения в степень и без счёта разрядов — а значит, без самой частой ошибки «перепутал, какой разряд нулевой».
Почему это работает? Раскроем скобки: ((0·8 + 7)·8 + 2)·8 + 5 = 7·8² + 2·8 + 5. Это ровно развёрнутая форма, только вынесены общие множители.
В коде схема Горнера занимает три строки:
n = 0
for c in '725':
n = n * 8 + int(c)
А для оснований до 36 в Python есть готовое средство: int('725', 8) сразу даёт 469, а int('3B', 16) — 59. Второй аргумент — основание. Это самый короткий способ перевода в десятичную, и на экзамене пользоваться им можно и нужно.
Разбор примера
Из десятичной в p-ичную: трассировка деления с остатком
Перевести число 2025 в восьмеричную, двоичную и шестнадцатеричную системы счисления.
Показать решение по шагам
- 1. Алгоритм один: делим число на основание, записываем остаток, частное снова делим, и так до нуля. Остатки, прочитанные снизу вверх, дают запись.
- 2. Восьмеричная. 2025 : 8 = 253, остаток 1. 253 : 8 = 31, остаток 5. 31 : 8 = 3, остаток 7. 3 : 8 = 0, остаток 3. Частное обнулилось, деления закончились.
- 3. Выписываем остатки снизу вверх: 3, 7, 5, 1. Получилось 3751₈. Проверка схемой Горнера: 0·8+3 = 3; 3·8+7 = 31; 31·8+5 = 253; 253·8+1 = 2025 ✔
- 4. Двоичная. Делить на 2 пришлось бы одиннадцать раз, и это долго. Есть путь короче: 8 = 2³, поэтому каждая восьмеричная цифра превращается ровно в три двоичных. 3 → 011, 7 → 111, 5 → 101, 1 → 001.
- 5. Склеиваем: 011 111 101 001, ведущий ноль отбрасываем — 11111101001₂. Одиннадцать разрядов. Проверка: старший разряд это 2¹⁰ = 1024, и 1024 + 512 + 256 + 128 + 64 + 32 + 8 + 1 = 2025 ✔
- 6. Шестнадцатеричная. 16 = 2⁴, значит двоичную запись надо резать на группы по четыре разряда, считая справа: 111 1110 1001. Левую группу дополняем нулями слева до четырёх: 0111 1110 1001.
- 7. Переводим каждую четвёрку: 0111 = 7, 1110 = 14 = E, 1001 = 9. Получилось 7E9₁₆. Проверка: 7·256 + 14·16 + 9 = 1792 + 224 + 9 = 2025 ✔
- 8. Главное правило группировки: считать разряды справа налево, а недостающие слева дополнять нулями. Если резать слева, все цифры уедут, и ошибка будет незаметной — запись получится правдоподобной, но чужой.
- 9. Программная проверка всех трёх переводов в одну строку:
print(bin(2025), oct(2025), hex(2025))печатает0b11111101001,0o3751,0x7e9. Префиксы0b,0o,0x— это пометки системы, в ответ их писать не надо, срезать их можно какbin(2025)[2:].
Ответ: 3751₈, 11111101001₂, 7E9₁₆
Вопрос на проверку
Двоичное число 1111101 надо перевести в шестнадцатеричную систему. Как резать его на группы?
Ответить и проверить себя — после бесплатной регистрации.
Арифметика внутри системы счисления
Складывать и вычитать можно, не переводя
В задании 14 и в задачах на исполнителей часто требуется сложить или вычесть числа прямо в p-ичной записи. Правила те же, что в столбик в десятичной, — меняется только момент переноса.
Сложение. Складываем разряды справа налево. Если сумма достигла основания или превысила его, вычитаем основание и переносим единицу в следующий разряд. В двоичной это выглядит совсем просто: 1 + 1 = 10, то есть в разряде ноль, а единица уходит влево.
Вычитание. Если уменьшаемый разряд меньше вычитаемого, занимаем единицу у старшего разряда — она приходит как целое основание. В двоичной 0 − 1 превращается в 10 − 1 = 1 с заёмом.
Умножение на основание — приписывание нуля справа, как умножение на 10 в десятичной. Деление нацело на основание — отбрасывание последней цифры. Отсюда же признак делимости: число делится на p тогда и только тогда, когда его запись оканчивается нулём, и делится на pk, если на конце k нулей.
Последнее правило регулярно решает задания целиком. «Сколько нулей на конце записи числа 1230 в системе с основанием 6?» — 12 = 6 · 2, значит 1230 = 630 · 230, и нулей на конце ровно 30.
Разбор примера
Двоичное сложение в столбик с трассировкой переносов
Сложить в двоичной системе 1011011₂ и 1101₂, не переводя числа в десятичную.
Показать решение по шагам
- 1.
Выравниваем по младшему разряду. Первое число семизначное, второе четырёхзначное — дополняем его нулями слева:
1011011 + 0001101
- 2. Разряд 0 (младший). 1 + 1 = 2, а это основание. Пишем 0, переносим 1. Результат пока: …0
- 3. Разряд 1. 1 + 0 = 1, плюс перенос 1 — снова 2. Пишем 0, переносим 1. Результат: …00
- 4. Разряд 2. 0 + 1 = 1, плюс перенос 1 = 2. Пишем 0, переносим 1. Результат: …000
- 5. Разряд 3. 1 + 1 = 2, плюс перенос 1 = 3. Три — это больше основания: вычитаем 2, пишем 1, переносим 1. Результат: …1000
- 6. Разряд 4. 1 + 0 = 1, плюс перенос 1 = 2. Пишем 0, переносим 1. Результат: …01000
- 7. Разряд 5. 0 + 0 = 0, плюс перенос 1 = 1. Пишем 1, переноса нет. Результат: …101000
- 8. Разряд 6 (старший). 1 + 0 = 1, переноса не было. Пишем 1. Итог: 1101000₂.
- 9. Проверка переводом: 1011011₂ = 64 + 16 + 8 + 2 + 1 = 91; 1101₂ = 8 + 4 + 1 = 13; сумма 104. А 1101000₂ = 64 + 32 + 8 = 104 ✔
- 10. Место, где чаще всего ошибаются, — разряд 3: там сумма трёх единиц даёт 3, и надо не забыть, что в разряде остаётся 1, а не 0. Правило общее: сумму разряда делим на основание, остаток пишем, частное переносим.
Ответ: 1101000₂ (то есть 104)
Вопрос на проверку
Сколькими нулями оканчивается запись числа 12³⁰ в системе счисления с основанием 6?
Ответить и проверить себя — после бесплатной регистрации.
Разбор примера
Двоичное вычитание с заёмом
Вычесть в двоичной системе: 1101000₂ − 1101₂.
Показать решение по шагам
- 1.
Выравниваем по младшему разряду:
1101000 − 0001101
- 2. Разряд 0. 0 − 1 — не хватает. Занимаем у старшего разряда: единица старшего разряда стоит вдвое дороже, то есть приходит как 2. Получаем 2 − 1 = 1. Пишем 1, разряд 1 становится должен.
- 3. Разряд 1. Там было 0, и он уже должен единицу, то есть фактически −1. Отнимаем ещё 0: −1. Снова занимаем: 2 − 1 − 0 = 1. Пишем 1, долг переходит в разряд 2. Результат пока: …11
- 4. Разряд 2. Было 0, долг 1, вычитаем 1: 0 − 1 − 1 = −2. Занимаем: 2 − 2 = 0. Пишем 0, долг переходит дальше. Результат: …011
- 5. Разряд 3. Было 1, долг 1, вычитаем 1: 1 − 1 − 1 = −1. Занимаем: 2 − 1 = 1. Пишем 1, долг идёт в разряд 4. Результат: …1011
- 6. Разряд 4. Было 0, долг 1, вычитать нечего: 0 − 1 = −1. Занимаем: 2 − 1 = 1. Пишем 1, долг в разряд 5. Результат: …11011
- 7. Разряд 5. Было 1, долг 1: 1 − 1 = 0. Пишем 0, долга больше нет. Результат: …011011
- 8. Разряд 6. Было 1, ничего не вычитаем и не должны. Пишем 1. Итог: 1011011₂.
- 9. Проверка: 1101000₂ = 104, 1101₂ = 13, разность 91. А 1011011₂ = 64 + 16 + 8 + 2 + 1 = 91 ✔ Это ровно те числа, которые складывались в предыдущем разборе, — сложение и вычитание проверяют друг друга.
- 10. Практический совет: длинную цепочку заёмов почти всегда проще обойти. 1101000₂ − 1101₂ можно посчитать как (1101000₂ − 1000₂) − 101₂, а вычитание степени двойки — это просто сброс одного разряда. На экзамене выигрыш во времени заметный.
Ответ: 1011011₂ (то есть 91)
Дробная часть переводится иначе
Целую часть переводят делением на основание, дробную — умножением. Правила зеркальны, и путать их нельзя: в аналитике линии 14 это отмечено как отдельная ловушка.
Алгоритм для дробной части: умножаем её на основание, целую часть результата записываем как очередную цифру, а с оставшейся дробью повторяем.
Переведём 0,375 в двоичную. 0,375 · 2 = 0,75 — целая часть 0. 0,75 · 2 = 1,5 — целая часть 1, остаётся 0,5. 0,5 · 2 = 1,0 — целая часть 1, остаётся 0. Процесс закончился.
Цифры выписываем сверху вниз (в порядке получения, а не наоборот, как для целой части): 0,011₂. Проверка: 0·½ + 1·¼ + 1·⅛ = 0,25 + 0,125 = 0,375 ✔
А теперь переведём 0,2. 0,2 · 2 = 0,4 → 0; 0,4 · 2 = 0,8 → 0; 0,8 · 2 = 1,6 → 1; 0,6 · 2 = 1,2 → 1; 0,2 · 2 = 0,4 → 0 — и мы вернулись к началу. Получилась бесконечная периодическая дробь 0,0011(0011)₂.
Это не любопытный факт, а объяснение вполне практической вещи: именно поэтому 0.1 + 0.2 == 0.3 в Python даёт ложь. Конечная десятичная дробь становится бесконечной двоичной, компьютер хранит её приближённо, и крошечная погрешность вылезает при сравнении. Отсюда правило, важное для линий 26 и 27: дробные числа не сравнивают на равенство, а где можно — переводят данные в целые.
Конечной двоичная запись дроби будет только тогда, когда знаменатель несократимой дроби — степень двойки: ½, ¼, ⅜, 0,375 = ⅜. Для одной пятой такого не бывает.
Вопрос на проверку
Дробную часть числа переводят в другую систему счисления…
Ответить и проверить себя — после бесплатной регистрации.
Что унести из урока
Позиционная система задаётся одним числом — основанием p. Цифр в ней ровно p, от 0 до p − 1, и значение цифры определяется её позицией: разряд номер k весит pk, нумерация разрядов идёт справа и с нуля.
Перевод в десятичную — это развёрнутая форма или, короче, схема Горнера: идти по цифрам слева направо, умножая накопленное на основание и прибавляя цифру. В Python это одна строка: int('725', 8).
Перевод из десятичной — деление с остатком до нуля, остатки читаются снизу вверх. В Python — bin, oct, hex или цикл s = str(n % p) + s; n //= p.
Если основания связаны степенью (8 = 2³, 16 = 2⁴), перевод делается группировкой разрядов, и группы отсчитываются от младшего разряда, то есть справа; неполную левую группу дополняют нулями слева.
Арифметика внутри системы работает по школьным правилам столбика: сумму разряда делим на основание, остаток пишем, частное переносим; при вычитании заём приходит как целое основание. Умножение на p — приписать ноль, и отсюда признак: k нулей на конце записи означают делимость на pk.
Эти механики понадобятся в линиях 14, 8, 5, 7 и 11 — то есть примерно в каждом пятом задании работы.
Задание №14 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №14 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.