Системы счисления для ЕГЭ по информатике (Задание 14)
Задания: N14.Системы счисления
1. Основные понятия
Задание 14 ЕГЭ по информатике проверяет умение работать с системами счисления и выполнять арифметические операции с большими числами. Это задание часто требует использования длинной арифметики и работы с различными системами счисления (двоичная, восьмеричная, шестнадцатеричная и др.).
Типичные формулировки:
- "Сколько единиц в двоичной записи числа ...?"
- "Сколько нулей в двоичной записи числа ...?"
- "Найдите значение выражения в указанной системе счисления"
- "Переведите число из одной системы счисления в другую"
Важно: На экзамене ЕГЭ 2026 можно использовать Python для решения задач с большими числами, так как Python поддерживает длинную арифметику автоматически.
2. Системы счисления
2.1. Позиционные системы счисления
Определение: Система счисления, в которой значение цифры зависит от её позиции в числе.
Основание системы счисления (q): Количество различных цифр, используемых в системе.
Примеры:
- Десятичная система (q=10): цифры 0-9
- Двоичная система (q=2): цифры 0, 1
- Восьмеричная система (q=8): цифры 0-7
- Шестнадцатеричная система (q=16): цифры 0-9, A-F
2.2. Представление числа в позиционной системе
Число в системе счисления с основанием q записывается как:
где $a_i$ это цифры числа, $0 \leq a_i < q$.
Пример: Число 1011₂ в двоичной системе:
2.3. Перевод чисел между системами счисления
Из любой системы в десятичную:
- Использовать развёрнутую форму записи числа
- Вычислить сумму произведений цифр на степени основания
Из десятичной в любую систему:
- Последовательно делить число на основание новой системы
- Записывать остатки от деления в обратном порядке
В Python:
# Перевод в десятичную
int("1011", 2) # 11
int("FF", 16) # 255
# Перевод из десятичной
bin(11) # "0b1011"
oct(255) # "0o377"
hex(255) # "0xff"
2.4. Метод разложения по степеням для перевода в двоичную систему
Метод разложения по степеням это способ перевода числа из десятичной системы в двоичную путём представления числа в виде суммы степеней двойки.
Алгоритм:
- Представить число в виде суммы степеней двойки
- Выписать все степени двойки от максимальной до нулевой
- На местах, где степень присутствует в разложении, поставить 1
- На местах, где степени нет, поставить 0
Пример: Перевод числа 35 в двоичную систему
Шаг 1: Разложим 35 на сумму степеней двойки
Шаг 2: Выпишем все степени двойки от 5 до 0:
Шаг 3: Определим, какие степени присутствуют:
- $2^5$ (32) это есть → 1
- $2^4$ (16) это нет → 0
- $2^3$ (8) это нет → 0
- $2^2$ (4) это нет → 0
- $2^1$ (2) это есть → 1
- $2^0$ (1) это есть → 1
Шаг 4: Запишем результат: 100011₂
Проверка:
2.5. Метод разложения по степеням для перевода в троичную систему
Метод разложения по степеням для троичной системы это способ перевода числа из десятичной системы в троичную путём представления числа в виде суммы степеней тройки с коэффициентами 0, 1 или 2.
Алгоритм:
- Представить число в виде суммы степеней тройки с коэффициентами (0, 1 или 2)
- Выписать все степени тройки от максимальной до нулевой
- На местах, где степень присутствует в разложении, поставить соответствующий коэффициент (0, 1 или 2)
- Если степень отсутствует, поставить 0
Важно: В троичной системе каждая позиция может содержать цифры 0, 1 или 2, поэтому при разложении нужно учитывать, что одна и та же степень может использоваться с коэффициентом 1 или 2.
Пример: Перевод числа 35 в троичную систему
Шаг 1: Найдём максимальную степень тройки, не превышающую 35
- $3^3 = 27$ (меньше 35)
- $3^4 = 81$ (больше 35)
Максимальная степень: $3^3 = 27$
Шаг 2: Разложим 35 на сумму степеней тройки
Теперь разложим 8:
Полное разложение:
Шаг 3: Выпишем все степени тройки от 3 до 0:
Шаг 4: Определим коэффициенты:
- $3^3$ (27) это коэффициент 1 → 1
- $3^2$ (9) это коэффициент 0 → 0
- $3^1$ (3) это коэффициент 2 → 2
- $3^0$ (1) это коэффициент 2 → 2
Шаг 5: Запишем результат: 1022₃
Проверка:
3. Длинная арифметика
3.1. Понятие длинной арифметики
Длинная арифметика это выполнение арифметических операций с числами, которые превышают диапазон стандартных целочисленных типов данных.
В Python: Целые числа (int) имеют неограниченную точность, поэтому длинная арифметика работает автоматически.
Пример:
# Обычные языки: переполнение при больших числах
# Python: работает с любыми числами
x = 4096**210 - 1024**67 + 256**32 - 64
print(x) # Вычисляется корректно
3.2. Операции с большими числами
Сложение и вычитание:
- Python автоматически обрабатывает большие числа
- Результат может быть сколь угодно большим
Умножение:
- Оператор
**для возведения в степень - Оператор
*для умножения
Пример:
# Вычисление большого выражения
result = 4096**210 - 1024**67 + 256**32 - 64
3.3. Работа с двоичным представлением
Функция bin():
- Преобразует число в строку с двоичным представлением
- Возвращает строку с префиксом "0b"
Пример:
bin(11) # "0b1011"
bin(11)[2:] # "1011" (убираем префикс)
Подсчёт символов:
.count("1")это количество единиц.count("0")это количество нулей
Пример:
s = 4096**210 - 1024**67 + 256**32 - 64
binary = bin(s)[2:] # Двоичное представление без префикса
ones = binary.count("1") # Количество единиц
zeros = binary.count("0") # Количество нулей
4. Типы задач задания 14
4.1. Подсчёт единиц/нулей в двоичной записи
Формулировка: "Сколько единиц в двоичной записи числа 4096^210 - 1024^67 + 256^32 - 64?"
Алгоритм решения:
- Вычислить значение выражения
- Преобразовать в двоичную систему через
bin() - Убрать префикс "0b" через
[2:] - Подсчитать единицы через
.count("1")
Код:
s = 4096**210 - 1024**67 + 256**32 - 64
print(bin(s)[2:].count("1"))
4.2. Арифметические операции в различных системах счисления
Формулировка: "Найдите значение выражения в указанной системе счисления"
Особенности:
- Могут быть операции сложения, вычитания, умножения
- Числа могут быть в разных системах счисления
- Нужно привести к одной системе или выполнить операции напрямую
4.3. Перевод между системами счисления
Формулировка: "Переведите число из системы счисления с основанием X в систему с основанием Y"
Алгоритм:
- Перевести число в десятичную систему
- Перевести из десятичной в целевую систему
5. Работа с функциями Python для систем счисления
5.1. Преобразование в строковое представление
| Функция | Основание | Пример | Результат |
|---|---|---|---|
bin(n) |
2 | bin(11) |
"0b1011" |
oct(n) |
8 | oct(255) |
"0o377" |
hex(n) |
16 | hex(255) |
"0xff" |
Важно: Все функции возвращают строку с префиксом (0b, 0o, 0x). Для получения чистой строки используйте [2:].
5.2. Преобразование из строкового представления
| Функция | Основание | Пример | Результат |
|---|---|---|---|
int(s, 2) |
2 | int("1011", 2) |
11 |
int(s, 8) |
8 | int("377", 8) |
255 |
int(s, 16) |
16 | int("FF", 16) |
255 |
Важно: Второй аргумент функции int() указывает основание системы счисления.
5.3. Работа с подстроками
Методы строк для подсчёта:
.count(substring)это подсчитывает количество вхождений подстроки[start:end]это срез строки
Пример:
binary = bin(11)[2:] # "1011"
ones = binary.count("1") # 3
zeros = binary.count("0") # 1
6. Примеры решения задач
Пример 1: Подсчёт единиц в двоичной записи
Условие: Сколько единиц в двоичной записи числа 4096^210 - 1024^67 + 256^32 - 64?
Решение:
s = 4096**210 - 1024**67 + 256**32 - 64
print(bin(s)[2:].count("1"))
Объяснение:
- Вычисляем значение выражения:
4096**210 - 1024**67 + 256**32 - 64 - Преобразуем в двоичную систему:
bin(s)→ получаем строку с префиксом "0b" - Убираем префикс:
[2:]→ получаем чистую двоичную строку - Подсчитываем единицы:
.count("1")
Ответ: 2100
Пример 2: Подсчёт нулей в двоичной записи
Условие: Сколько нулей в двоичной записи числа 2^100 - 2^50?
Решение:
s = 2**100 - 2**50
binary = bin(s)[2:]
zeros = binary.count("0")
print(zeros)
Пример 3: Работа с различными системами счисления
Условие: Найдите значение выражения (1011₂ + FF₁₆)₁₀ в десятичной системе.
Решение:
binary = int("1011", 2) # 11
hex_num = int("FF", 16) # 255
result = binary + hex_num
print(result) # 266
7. Типичные ошибки и как их избежать
7.1. Ошибка: Забыли убрать префикс "0b"
Проблема: Использование bin(s).count("1") вместо bin(s)[2:].count("1")
Последствие: Префикс "0b" содержит одну единицу, что даёт неверный результат.
Решение: Всегда использовать [2:] для удаления префикса.
7.2. Ошибка: Неправильное основание при переводе
Проблема: Путают порядок аргументов в int() или используют неправильное основание.
Решение:
int("1011", 2)это правильно (строка, основание)- Проверять основание системы счисления в условии
7.3. Ошибка: Переполнение в других языках
Проблема: В языках типа C++/Java большие числа вызывают переполнение.
Решение: В Python этой проблемы нет, но нужно понимать, что Python автоматически использует длинную арифметику.
7.4. Ошибка: Неправильный подсчёт символов
Проблема: Путают .count("1") и .count("0") или считают все символы.
Решение:
- Внимательно читать условие: "единиц" или "нулей"
- Использовать правильный метод:
.count("1")или.count("0")
8. Алгоритм решения задач задания 14
Шаг 1: Анализ условия
- Определить, что нужно найти (единицы, нули, значение выражения)
- Выписать выражение или числа
- Определить системы счисления
Шаг 2: Выбор метода решения
- Если большие числа → использовать Python с длинной арифметикой
- Если перевод между системами → использовать
int()иbin()/oct()/hex() - Если подсчёт символов → использовать
.count()
Шаг 3: Написание кода
- Вычислить значение выражения (если нужно)
- Преобразовать в нужную систему счисления
- Подсчитать требуемые символы
Шаг 4: Проверка результата
- Проверить на простых примерах
- Убедиться, что префиксы убраны
- Проверить правильность подсчёта
9. Стратегия решения на экзамене
9.1. Время на задание 14
Рекомендуемое время: 5-8 минут
Распределение:
- Чтение условия: 1 минута
- Написание кода: 2-3 минуты
- Запуск и проверка: 2-3 минуты
- Проверка результата: 1 минута
9.2. Алгоритм действий
Внимательно прочитать условие:
- Что нужно найти (единицы, нули, значение)
- Какие системы счисления используются
- Какие операции нужно выполнить
Написать код:
- Вычислить выражение (если нужно)
- Преобразовать в нужную систему
- Подсчитать требуемые символы
Запустить и проверить:
- Проверить результат на простых примерах
- Убедиться в правильности подсчёта
9.3. Если не получается
- Проверьте, убран ли префикс "0b" через
[2:] - Убедитесь, что используете правильное основание в
int() - Проверьте, правильно ли считаете единицы/нули
- Попробуйте вывести промежуточные результаты для отладки
10. Полезные приёмы
10.1. Работа с большими степенями
Важно: Python автоматически обрабатывает большие числа, но вычисления могут занять время.
Оптимизация:
- Для очень больших чисел можно использовать промежуточные вычисления
- Проверять результат на меньших примерах
10.2. Проверка результата
Способ 1: Проверка на простом примере
# Проверка: число 11 в двоичной = 1011, единиц = 3
test = 11
print(bin(test)[2:].count("1")) # Должно быть 3
Способ 2: Вывод промежуточных результатов
s = 4096**210 - 1024**67 + 256**32 - 64
binary = bin(s)[2:]
print(f"Длина двоичной записи: {len(binary)}")
print(f"Единиц: {binary.count('1')}")
print(f"Нулей: {binary.count('0')}")
11. Ссылки на материалы
Подборка заданий в Яндекс Учебнике: №14. Системы счисления
Удачи на экзамене! 🎓