Перевод и сравнение в разных основаниях
Учимся за минуту сравнивать числа, записанные в разных системах счисления, — это одно из самых частых заданий первой части экзамена.
Главный приём. Чтобы сравнить числа в разных основаниях, приведи их все к одной системе — почти всегда удобнее всего к десятичной, потому что в ней мы считаем устно.
На ЕГЭ и ОГЭ постоянно встречаются задания, где дано несколько чисел в разных системах счисления и просят выбрать наибольшее, наименьшее или расставить их по порядку. Само по себе это нетрудно, но в стрессе экзамена легко запутаться: какое из чисел $1011_2$, $13_8$ или $A_{16}$ больше? На глаз — никак, цифры обманывают. Поэтому нужен надёжный алгоритм, который работает всегда и не требует везения.
Зачем это уметь? Во-первых, такие задания дают «лёгкие» баллы — их обидно терять. Во-вторых, навык быстрого перевода — фундамент для более сложных задач из этого раздела: уравнений с основанием и подсчёта цифр. Освоив перевод как следует, ты разгрузишь голову для действительно трудных номеров.
Базовый алгоритм: всё в десятичную
Любое число в позиционной системе с основанием $q$ — это сумма произведений цифр на степени основания. Если запись числа есть $a_{n}a_{n-1}\dots a_1 a_0$, то его десятичное значение считается по формуле развёрнутого многочлена:
$$ N = a_n \cdot q^{n} + a_{n-1}\cdot q^{n-1} + \dots + a_1\cdot q^{1} + a_0\cdot q^{0}. $$
Здесь $q$ — основание (для двоичной $q=2$, для восьмеричной $q=8$, для шестнадцатеричной $q=16$), а каждая цифра $a_i$ строго меньше основания. Степени растут справа налево: самый правый разряд умножается на $q^0 = 1$, следующий на $q^1$, и так далее.
Разбор задачи 1
Даны числа: $A = 1011_2$, $B = 13_8$, $C = 12_{10}$. Какое из них наибольшее?
Переводим каждое в десятичную систему:
$$ A = 1\cdot 2^{3} + 0\cdot 2^{2} + 1\cdot 2^{1} + 1\cdot 2^{0} = 8 + 0 + 2 + 1 = 11. $$
$$ B = 1\cdot 8^{1} + 3\cdot 8^{0} = 8 + 3 = 11. $$
$$ C = 12. $$
Сравниваем десятичные значения: $11 = 11 \lt 12$. Значит, наибольшее число — $C = 12_{10}$, а $A$ и $B$ равны между собой. Обрати внимание: внешне $1011_2$ выглядит «длиннее» и кажется большим, но длина записи в маленьком основании обманчива.
Разбор задачи 2
Расположите в порядке возрастания: $2A_{16}$, $52_8$, $42_{10}$.
$$ 2A_{16} = 2\cdot 16^{1} + 10\cdot 16^{0} = 32 + 10 = 42. $$
Здесь цифра $A$ в шестнадцатеричной системе означает десятку. Дальше:
$$ 52_8 = 5\cdot 8^{1} + 2\cdot 8^{0} = 40 + 2 = 42. $$
А $42_{10} = 42$. Все три числа оказались равны! Это любимая ловушка составителей: задание выглядит так, будто числа разные, а на деле это одно и то же значение, записанное в трёх системах. Правильный ответ — любой порядок, числа равны.
Быстрые приёмы без полного перевода
Иногда полный перевод не нужен, и можно сэкономить время.
Приём «по числу разрядов»
Если два числа записаны в одном основании, то большее число — у которого больше значащих разрядов (старшая цифра не ноль). Например, $111_2$ (три разряда) меньше $1000_2$ (четыре разряда): $7 \lt 8$. Это очевидно, но в спешке помогает отсеять кандидатов.
Приём «оценка сверху»
Максимальное $k$-разрядное число в системе с основанием $q$ равно $q^{k} - 1$. Например, наибольшее трёхзначное двоичное — $111_2 = 2^{3} - 1 = 7$. Если одно число заведомо не дотягивает до диапазона другого, перевод можно не доводить до конца.
Как это работает
Чтобы не считать степени вручную и не ошибиться, перевод удобно автоматизировать. В Python есть встроенная функция int(строка, основание), которая делает ровно то, что мы расписывали формулой выше.
nums = [("1011", 2), ("13", 8), ("2A", 16), ("42", 10)]
for s, base in nums:
value = int(s, base)
print(f"{s} (основание {base}) = {value}")
biggest = max(nums, key=lambda p: int(p[0], p[1]))
print("Наибольшее:", biggest[0], "в основании", biggest[1])
Вывод:
1011 (основание 2) = 11 13 (основание 8) = 11 2A (основание 16) = 42 42 (основание 10) = 42 Наибольшее: 2A в основании 16
Видно, что $2A_{16}$ и $42_{10}$ дали одинаковое значение 42, и max вернул первое из равных. На экзамене такой код не нужен, но дома он помогает проверить себя и набить руку: переводи числа в уме, а потом сверяй с программой.
Частые ошибки
- Путают направление степеней. Степени растут справа налево: правый разряд — это $q^0$, а не старший. Если начать слева, получится бессмыслица.
- Забывают, что цифра меньше основания. Запись $182_8$ некорректна: цифры 8 в восьмеричной системе не существует, максимальная цифра здесь — 7.
- Не переводят буквы в hex. В шестнадцатеричной системе $A=10$, $B=11$, $C=12$, $D=13$, $E=14$, $F=15$. Их легко принять за «обычные» символы и забыть подставить число.
- Сравнивают по длине записи между разными основаниями. Длинное двоичное число вполне может быть меньше короткого шестнадцатеричного — длина без учёта основания ничего не значит.
Итоги
- Универсальный приём сравнения: перевести все числа в десятичную систему по формуле развёрнутого многочлена.
- Степени основания растут справа налево, начиная с $q^0$; каждая цифра строго меньше основания.
- Буквы A–F в hex — это числа 10–15, их обязательно подставляем.
- Быстрые оценки (число разрядов, $q^{k}-1$) экономят время, но финальное сравнение надёжнее делать по десятичным значениям.