Перевод и сравнение в разных основаниях

Учимся за минуту сравнивать числа, записанные в разных системах счисления, — это одно из самых частых заданий первой части экзамена.

Главный приём. Чтобы сравнить числа в разных основаниях, приведи их все к одной системе — почти всегда удобнее всего к десятичной, потому что в ней мы считаем устно.

На ЕГЭ и ОГЭ постоянно встречаются задания, где дано несколько чисел в разных системах счисления и просят выбрать наибольшее, наименьшее или расставить их по порядку. Само по себе это нетрудно, но в стрессе экзамена легко запутаться: какое из чисел $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$) экономят время, но финальное сравнение надёжнее делать по десятичным значениям.
Проверьте себя
1. Какое из чисел наибольшее: 1111(2), 17(8) или 16(10)?
A1111(2)
B17(8)
C16(10)
Dвсе равны
2. Чему равно шестнадцатеричное число 1F в десятичной системе?
A16
B30
C31
D115