ЕГЭ · Информатика · Кодирование информации и системы счисления
Двоичная, восьмеричная и шестнадцатеричная
Три родственных системы счисления: таблица соответствий, перевод через триады и тетрады без деления, свойства записи числа и приём для задания 14 — работа со степенями основания.
🎯 ЕГЭ информатика: этот урок закрывает задание(я) 14. Ключ ко всему заданию — понимать, что запись числа в системе с основанием p — это разложение по степеням p, а действия со степенями основания в этой записи выглядят особенно просто.
- ⚠Группируют биты в триады и тетрады слева направо: правильно — справа налево, старшую группу дополняя нулями
- ⚠Путают число цифр и значение числа: 8 в десятичной — одна цифра, а в двоичной 1000 — четыре
- ⚠Забывают, что последняя цифра записи в системе p — это остаток от деления на p
- ⚠Пытаются считать 4²⁷ «в лоб», хотя в четверичной системе это просто единица и 27 нулей
- ⚠При вычитании в непривычной системе занимают десяток вместо основания
Три системы и их родство
Определение
Позиционная запись — запись aₙ…a₁a₀ в системе с основанием p означает aₙ·pⁿ + … + a₁·p¹ + a₀·p⁰, где каждая цифра меньше основания. В двоичной цифры — 0 и 1, в восьмеричной — 0…7, в шестнадцатеричной — 0…9 и буквы A = 10, B = 11, C = 12, D = 13, E = 14, F = 15. Системы 8 и 16 удобны именно потому, что 8 = 2³ и 16 = 2⁴: перевод в двоичную и обратно делается без единого деления.
| 0–3 | 0 = 0000 = 0₈, 1 = 0001 = 1₈, 2 = 0010 = 2₈, 3 = 0011 = 3₈ |
|---|---|
| 4–7 | 4 = 0100, 5 = 0101, 6 = 0110, 7 = 0111 (в восьмеричной те же цифры 4–7) |
| 8–11 | 8 = 1000 = 8₁₆, 9 = 1001 = 9₁₆, 10 = 1010 = A, 11 = 1011 = B |
| 12–15 | 12 = 1100 = C, 13 = 1101 = D, 14 = 1110 = E, 15 = 1111 = F |
| Степени двойки | 2⁰=1, 2¹=2, 2²=4, 2³=8, 2⁴=16, 2⁵=32, 2⁶=64, 2⁷=128, 2⁸=256, 2⁹=512, 2¹⁰=1024, 2¹⁶ = 65 536, 2²⁰ ≈ 10⁶ |
| Из p в 10 | разложить по степеням: 2A₁₆ = 2·16 + 10 = 42; 101101₂ = 32 + 8 + 4 + 1 = 45 |
|---|---|
| Из 10 в p | делить с остатком на p, остатки выписывать снизу вверх: 45 : 2 = 22 (ост. 1), 22 : 2 = 11 (0), 11 : 2 = 5 (1), 5 : 2 = 2 (1), 2 : 2 = 1 (0), 1 : 2 = 0 (1) → 101101₂ |
| Из 2 в 8 и 16 | разбить биты справа налево на триады (для 8) или тетрады (для 16), недостающие старшие разряды дополнить нулями, каждую группу заменить цифрой |
| Из 8 и 16 в 2 | каждую цифру заменить её триадой или тетрадой, ведущие нули у самой левой группы отбросить |
| Между 8 и 16 | только через двоичную: напрямую группы не совпадают, потому что 3 и 4 не кратны друг другу |
Группировка всегда справа налево, потому что справа стоят младшие разряды и именно они образуют полные группы. Пример ошибки: 11011₂ → если резать слева, получится 110|11 → «62₈», что неверно. Правильно: 11|011 → дополняем старшую группу до триады 011|011 → 33₈. Проверка: 11011₂ = 16+8+2+1 = 27, а 33₈ = 3·8+3 = 27 ✔
| Последняя цифра | остаток от деления на основание. Число оканчивается на 0 в системе p ⟺ оно делится на p |
|---|---|
| k нулей на конце | число делится на pᵏ. Например, запись в восьмеричной оканчивается двумя нулями ⟺ число кратно 64 |
| Число цифр | число N в системе p занимает ⌊logp N⌋ + 1 цифру. Степень pⁿ записывается как 1 и n нулей, то есть n + 1 цифра |
| pⁿ − 1 | n наибольших цифр подряд: 4⁵ − 1 = 33333₄, 8³ − 1 = 777₈, 2⁷ − 1 = 1111111₂, 16² − 1 = FF₁₆ |
| Сумма цифр | меняется при переносах; в задании 14 её считают по готовой структуре записи, а не переводя число целиком |
Разбор примера
Перевод 3F₁₆ в восьмеричную систему
Перевести шестнадцатеричное число 3F в восьмеричную систему счисления.
Показать решение по шагам
- 1. Шаг 1. Напрямую между 16 и 8 переводить нельзя — идём через двоичную.
- 2. Шаг 2. Раскрываем каждую шестнадцатеричную цифру в тетраду: 3 → 0011, F → 1111. Склеиваем: 00111111₂.
- 3. Шаг 3. Отбрасываем ведущие нули: 111111₂.
- 4. Шаг 4. Группируем справа налево по три бита: 111 | 111.
- 5. Шаг 5. Каждую триаду переводим в восьмеричную цифру: 111₂ = 7, 111₂ = 7 → 77₈.
- 6. Проверка через десятичную: 3F₁₆ = 3·16 + 15 = 63; 77₈ = 7·8 + 7 = 63 ✔
Ответ: 77₈
Разбор примера
Задание 14: считаем цифры в записи 8²⁰ + 8¹⁵ − 64
Значение выражения 8²⁰ + 8¹⁵ − 64 записали в восьмеричной системе счисления. Сколько цифр «7» содержится в этой записи?
Показать решение по шагам
- 1. Шаг 1. Не считаем число целиком: 8²⁰ — это примерно 10¹⁸, в десятичной с ним работать бессмысленно. Замечаем, что все слагаемые — степени восьмёрки: 64 = 8².
- 2. Шаг 2. Записываем каждое слагаемое в восьмеричной: 8²⁰ = 1 и 20 нулей (21 цифра), 8¹⁵ = 1 и 15 нулей, 8² = 100₈.
- 3. Шаг 3. Сначала выполняем вычитание в «маленькой» части: 8¹⁵ − 8² = 8²·(8¹³ − 1). Множитель 8¹³ − 1 — это тринадцать семёрок подряд (аналог 999…9 в десятичной), а умножение на 8² приписывает два нуля. Значит 8¹⁵ − 64 = 7777777777777 00₈ — 13 семёрок и 2 нуля, всего 15 цифр.
- 4. Шаг 4. Теперь прибавляем 8²⁰. Это единица в 21-м разряде, и она не пересекается с уже полученными 15 цифрами, поэтому переносов не будет. Между единицей и семёрками окажется 20 − 15 = 5 нулей.
- 5. Шаг 5. Итоговая запись: 1 00000 7777777777777 00₈ — всего 21 цифра.
- 6. Шаг 6. Считаем семёрки: их ровно 13.
- 7. Самопроверка: сумма всех цифр записи равна 13·7 + 1 = 92, а количество цифр 1 + 5 + 13 + 2 = 21 — согласуется с тем, что 8²⁰ занимает 21 разряд ✔
Ответ: 13
Почему восьмеричная и шестнадцатеричная системы вообще нужны
Машина работает в двоичной системе, человек — в десятичной. Между ними стоят две вспомогательные системы, и выбраны они не случайно.
Основания 8 и 16 — это степени двойки: 8 = 2³, 16 = 2⁴. Из этого следует замечательное свойство: перевод между двоичной и этими системами выполняется без всякой арифметики, простой заменой групп цифр.
Триады и тетрады. Одна восьмеричная цифра в точности соответствует трём двоичным (триаде), одна шестнадцатеричная — четырём (тетраде).
Чтобы перевести двоичное число в восьмеричное, разбейте его на тройки справа налево, дополнив слева нулями до полной группы, и замените каждую тройку цифрой: 101101110₂ → 101 101 110 → 5 5 6 → 556₈.
В шестнадцатеричную — то же самое, но группами по четыре: 101101110₂ → 0001 0110 1110 → 1 6 E → 16E₁₆.
Обратный перевод ещё проще: каждую цифру заменяют её триадой или тетрадой, ведущие нули отбрасывают.
Почему разбивать нужно справа налево. Потому что значение разряда растёт влево, и «лишние» позиции добавляются именно слева. Если разбить слева направо, младшие разряды окажутся в неполной группе, и число исказится. Это одна из самых частых ошибок темы.
Практический смысл. Шестнадцатеричная запись вчетверо короче двоичной и читается человеком. Поэтому в ней записывают адреса памяти, машинные коды, цвета в вёрстке (запись вида #FF8800 — это три байта: красный, зелёный, синий) и содержимое файлов в шестнадцатеричных редакторах. Байт всегда укладывается ровно в две шестнадцатеричные цифры, и это делает такую запись естественной единицей.
Таблица, которую стоит держать в голове — соответствие тетрад и шестнадцатеричных цифр от 0000 до 1111, то есть от 0 до F. Её знание превращает большинство переводов в механическую операцию без единого деления.

Вопрос на проверку
Скольким двоичным разрядам соответствует одна шестнадцатеричная цифра?
Ответить и проверить себя — после бесплатной регистрации.
Вопрос на проверку
Как правильно перевести 11011₂ в восьмеричную систему?
Ответить и проверить себя — после бесплатной регистрации.
Вопрос на проверку
Как в четверичной системе счисления выглядит число 4⁵ − 1?
Ответить и проверить себя — после бесплатной регистрации.
Вопрос на проверку
Запись числа в восьмеричной системе оканчивается двумя нулями. На что гарантированно делится это число?
Ответить и проверить себя — после бесплатной регистрации.
Сколько разрядов нужно числу
Разрядность записи и почему её спрашивают
Вопрос «сколько разрядов в записи числа» выглядит побочным, но он лежит в основе сразу нескольких линий ЕГЭ. В линии 11 спрашивают, сколько бит нужно на код сотрудника; в линии 7 — сколько бит на пиксель при палитре в N цветов; в линии 14 — сколько цифр в записи большого числа. Это один и тот же вопрос.
Формула. Число n в системе с основанием p занимает ⌊logp n⌋ + 1 разрядов. Понять её проще без логарифмов: k разрядов позволяют записать числа от 0 до pk − 1, то есть ровно pk разных значений. Значит, число n умещается в k разрядов, когда pk > n, и k берут наименьшим таким.
Пример. Сколько двоичных разрядов у числа 1000? Ищем наименьшую степень двойки, превосходящую 1000: 2⁹ = 512 — мало, 2¹⁰ = 1024 — хватает. Значит, 10 разрядов. Проверка: 1000₁₀ = 1111101000₂ — считаем знаки, их десять ✔
Обратный вопрос, который встречается чаще: «какое наибольшее число можно записать k разрядами». Ответ pk − 1: наибольшая запись — это k наибольших цифр подряд. В двоичной 8 разрядов дают числа от 0 до 255.
И третий вариант того же вопроса — из линии 11: «в базе 500 сотрудников, сколько бит нужно на код». Кодов нужно 500 штук, 2⁸ = 256 мало, 2⁹ = 512 достаточно, значит 9 бит. Обратите внимание: здесь округление вверх, потому что дробного числа бит не бывает, а восьми уже не хватает. Это та же ⌈log₂500⌉ = 9.
Разбор примера
Разрядность в обе стороны
1) Сколько разрядов в записи числа 2025 в восьмеричной системе? 2) Какое наибольшее число записывается пятью троичными разрядами? 3) Сколько бит нужно, чтобы закодировать 300 различных состояний?
Показать решение по шагам
- 1. Задача 1. Ищем наименьшую степень восьмёрки, превосходящую 2025. 8³ = 512 — мало. 8⁴ = 4096 — хватает. Значит, разрядов 4.
- 2. Проверка: 2025 = 3751₈, и в этой записи действительно четыре цифры ✔ Заметьте, что перевод делать было не обязательно — достаточно сравнить со степенями.
- 3. Задача 2. Пять троичных разрядов дают 3⁵ = 243 различных значения, от 0 до 242. Само число 242 записывается как 22222₃ — пять наибольших цифр системы.
- 4. Проверка: 2·81 + 2·27 + 2·9 + 2·3 + 2 = 162 + 54 + 18 + 6 + 2 = 242 ✔
- 5. Задача 3. Нужно 300 различных кодов. 2⁸ = 256 — мало, 2⁹ = 512 — достаточно. Ответ: 9 бит.
- 6. Типичная ошибка третьей задачи — посчитать 2⁸ = 256 и решить, что «почти хватает, округлим до восьми». Округление здесь только вверх: восьми бит не хватит на 300 кодов физически, и 44 состояния останутся без обозначения.
- 7. Обратная ошибка встречается в задаче 2: «пять разрядов дают числа до 3⁵ = 243». Нет: значений 243, но наибольшее из них 242, потому что счёт идёт с нуля. Эта разница на единицу и есть весь смысл формулы pk − 1.
Ответ: 4 разряда; 242; 9 бит
Готовые средства Python
Всё, что нужно, уже написано
На экзамене под рукой среда программирования, и переводы между системами счисления в Python уже реализованы. Пользоваться ими быстрее и надёжнее, чем считать в столбик.
Из десятичной. bin(n), oct(n), hex(n) дают строку с префиксом: bin(2025) возвращает '0b11111101001'. Префикс срезают: bin(2025)[2:]. Есть и более общая запись через форматирование: f'{2025:b}', f'{2025:o}', f'{2025:x}' — без префикса сразу.
В десятичную. int(s, p) переводит строку s из системы с основанием p: int('3751', 8) даёт 2025, int('7E9', 16) даёт 2025, int('11111101001', 2) — тоже 2025. Регистр букв в шестнадцатеричной записи не важен.
Между системами напрямую готовой функции нет, и это правильно: перевод всегда идёт через десятичную или через двоичную. oct(int('3F', 16)) переводит из шестнадцатеричной в восьмеричную за один ход.
Для оснований больше 16 встроенных средств нет, и функцию пишут руками — она понадобится в линии 14 с основанием 19 или 27:
ALF = '0123456789ABCDEFGHIJ'
def v_sisteme(n, p):
s = ''
while n > 0:
s = ALF[n % p] + s
n //= p
return s or '0'
Дополнение нулями слева — s.zfill(8) доводит строку до восьми знаков. Это нужно, когда разрядность фиксирована: байт записывают восемью битами, даже если старшие нули.
Разбор примера
Перевод между системами программой
Перевести 3F₁₆ в восьмеричную систему тремя способами и убедиться, что ответы совпадают.
Показать решение по шагам
- 1.
print(oct(int('3F', 16))[2:]) # через готовые функции print(f"{int('3F', 16):o}") # через форматирование print(f"{int('3F', 16):b}") # заодно посмотрим двоичную запись - 2. Шаг 1.
int('3F', 16)считает значение: 3·16 + 15 = 63. Буква F — это цифра 15; регистр не важен,int('3f', 16)даст то же самое. - 3. Шаг 2.
oct(63)возвращает'0o77', срез[2:]убирает префикс и оставляет 77. Форматированиеf'{63:o}'даёт77сразу. - 4. Шаг 3. Проверка ручным способом, тем самым, что разобран выше. 3F₁₆ → каждая цифра в тетраду: 3 → 0011, F → 1111. Склеиваем: 00111111, отбрасываем ведущие нули — 111111₂.
- 5. Шаг 4. Режем двоичную запись на триады справа налево: 111 | 111. Обе группы дают семёрку. Получается 77₈ — совпало с программой.
- 6. Шаг 5. Проверка через десятичную: 77₈ = 7·8 + 7 = 63 ✔ Все три пути привели к одному числу.
- 7. Заметьте, почему именно 63 даёт такую красивую запись: 63 = 64 − 1 = 2⁶ − 1, а значит, в двоичной это шесть единиц, а в восьмеричной — две семёрки (8² − 1 = 63). Одно и то же число, две разные «цепочки наибольших цифр».
Ответ: 77₈
Сравнение чисел, записанных в разных системах
Отдельный тип вопроса: «расположите числа в порядке возрастания» или «какое из чисел наибольшее», а записаны они в разных системах.
Правило одно: привести всё к одной системе, проще всего к десятичной. Сравнивать записи «на глаз» нельзя — более длинная запись вовсе не означает большее число, потому что у неё может быть меньшее основание.
Сравним 2A₁₆, 53₈, 101100₂ и 45₁₀.
2A₁₆ = 2·16 + 10 = 42.
53₈ = 5·8 + 3 = 43.
101100₂ = 32 + 8 + 4 = 44.
45₁₀ = 45.
Порядок возрастания получился ровно обратным длине записи: самое короткое 2A₁₆ оказалось наименьшим, а самое длинное 101100₂ — вовсе не наибольшим. Это и есть суть ловушки: чем меньше основание, тем длиннее запись того же числа, и длина ничего не говорит о величине.
Программой это проверяется в одну строку: sorted([int('2A',16), int('53',8), int('101100',2), 45]) даёт [42, 43, 44, 45].
Есть и полезное наблюдение про соседние системы: одно и то же число в восьмеричной записи примерно втрое короче двоичной, а в шестнадцатеричной — вчетверо. Поэтому программисты и пишут адреса памяти шестнадцатеричными: 32-битный адрес умещается в восемь знаков вместо тридцати двух.
Вопрос на проверку
Какое из чисел наибольшее: 2A₁₆, 53₈, 101100₂?
Ответить и проверить себя — после бесплатной регистрации.
Что унести из урока
Двоичная, восьмеричная и шестнадцатеричная системы связаны родством: 8 = 2³, 16 = 2⁴. Поэтому одна восьмеричная цифра это триада бит, одна шестнадцатеричная — тетрада, и перевод между ними делается группировкой, всегда справа налево, с дополнением левой группы нулями.
Напрямую между восьмеричной и шестнадцатеричной не переводят: идут через двоичную (или через десятичную).
Разрядность: число n занимает столько разрядов, сколько нужно, чтобы pk превзошло n; k разрядов дают pk значений, от 0 до pk − 1. Из этой же формулы берутся «сколько бит на код» в линии 11 и «сколько бит на пиксель» в линии 7 — и округление там всегда вверх.
Свойства записи, которые спрашивают в линии 14: последняя цифра — это остаток от деления на основание; k нулей на конце означают делимость на pk; pk − 1 — это k наибольших цифр подряд.
В Python всё уже есть: bin, oct, hex и форматирование f'{n:b}' — из десятичной; int(s, p) — в десятичную; своя функция на пять строк — для оснований больше шестнадцати.
И помните про сравнение: длина записи ничего не говорит о величине числа. Приводите к одной системе, а уже потом сравнивайте.
Задание №14 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №14 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №14 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.