Перевод чисел между системами счисления: алгоритмы и самопроверка

Иван Корнев·15.05.2026·7 мин

Чтобы перевести число из любой системы (2, 8, 16) в другую, проще всего использовать десятичную систему как промежуточное звено. Сначала разверните исходное число в десятичное через суммы степеней основания, а затем последовательным делением получите результат в целевой системе. Этот метод универсален, исключает ошибки группировки и позволяет легко проверить ответ обратным действием.

Зачем нужен «виртуальный калькулятор» в голове

Онлайн-конвертеры удобны для быстрых расчетов, но в программировании, отладке кода или на экзаменах доступ к ним часто ограничен. Понимание механики перевода помогает:

  • Быстро читать машинные коды и цвета в HEX.
  • Находить ошибки в битовых масках.
  • Понимать, как компьютер хранит данные.

Главная цель обучения — не запомнить все значения наизусть, а усвоить два базовых алгоритма: разложение по степеням (для перевода в десятичную) и последовательное деление (для перевода из десятичной).

Золотое правило: Если вы запутались в прямом переводе (например, из 16-ричной в 8-ричную), всегда идите через десятичную систему. Это чуть дольше, но надежнее.

Алгоритм 1: Перевод в десятичную систему (из 2, 8, 16)

Любое число в позиционной системе счисления представляет собой сумму произведений цифр на основание системы в степени позиции цифры. Нумерация позиций идет справа налево, начиная с нуля.

Формула: $$ N = d_n \cdot b^n + ... + d_1 \cdot b^1 + d_0 \cdot b^0 $$ где $b$ — основание системы, $d$ — цифра разряда.

Примеры расчета

1. Из двоичной ($2$) в десятичную: Число $1011_2$: $$ 1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 1 \cdot 2^0 = 8 + 0 + 2 + 1 = 11_{10} $$

2. Из восьмеричной ($8$) в десятичную: Число $37_8$: $$ 3 \cdot 8^1 + 7 \cdot 8^0 = 24 + 7 = 31_{10} $$

3. Из шестнадцатеричной ($16$) в десятичную: Число $A2_{16}$ (помним, что $A=10$): $$ 10 \cdot 16^1 + 2 \cdot 16^0 = 160 + 2 = 162_{10} $$

Алгоритм 2: Перевод из десятичной системы (в 2, 8, 16)

Чтобы перевести десятичное число в другую систему, нужно делить его на основание целевой системы до тех пор, пока частное не станет равно нулю. Остатки от деления записываются в обратном порядке (снизу вверх).

Пример: $25_{10}$ в двоичную, восьмеричную и HEX

Делим наЧастноеОстатокПримечание
На 2 (Binary)
$25 / 2$121Младший разряд
$12 / 2$60
$6 / 2$30
$3 / 2$11
$1 / 2$01Старший разряд
Итог: $11001_2$
Делим наЧастноеОстатокПримечание
На 8 (Octal)
$25 / 8$31
$3 / 8$03
Итог: $31_8$
Делим наЧастноеОстатокПримечание
На 16 (Hex)
$25 / 16$19
$1 / 16$01
Итог: $19_{16}$

При переводе в шестнадцатеричную систему, если остаток больше 9, заменяйте его буквой: 10→A, 11→B, 12→C, 13→D, 14→E, 15→F.

Быстрый перевод между 2, 8 и 16 (метод группировки)

Поскольку $8 = 2^3$ и $16 = 2^4$, перевод между этими системами можно делать без десятичной промежуточной стадии, используя группировку битов. Это самый быстрый способ для программистов.

Правило триад (для восьмеричной)

Разбейте двоичное число на группы по 3 бита справа налево. Дополните слева нулями, если группа неполная.

Пример: $110101_2$

  1. Разбиваем: 110 101
  2. Считаем каждую группу:
    • $110_2 = 6_8$
    • $101_2 = 5_8$
  3. Результат: $65_8$

Правило тетрад (для шестнадцатеричной)

Разбейте двоичное число на группы по 4 бита справа налево.

Пример: $1111010_2$

  1. Разбиваем: 0111 1010 (добавили ноль слева)
  2. Считаем:
    • $0111_2 = 7_{16}$
    • $1010_2 = 10_{10} = A_{16}$
  3. Результат: $7A_{16}$

Таблица соответствия основных значений

Эта таблица поможет сверяться при ручном счете. Рекомендуется запомнить значения до 16, так как они формируют основу одной HEX-цифры.

Dec (10)Bin (2)Oct (8)Hex (16)
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F
16100002010

Как проверять ответы без калькулятора

Если вы решили задачу вручную, используйте эти методы верификации, чтобы убедиться в правильности результата.

1. Обратный перевод

Самый надежный способ. Если вы перевели $1010_2$ в $A_{16}$, попробуйте перевести $A_{16}$ обратно в двоичную систему. Если получили исходное число — ответ верен.

2. Оценка порядка величины

  • В двоичной системе количество цифр примерно в 3–4 раза больше, чем в десятичной.
  • В HEX-системе количество цифр примерно в 2–2.5 раза меньше, чем в десятичной. Если при переводе $255_{10}$ вы получили $FF_{16}$ (2 знака против 3), это логично. Если получилось $FFF$ — явная ошибка.

3. Проверка крайних разрядов

  • Четное десятичное число всегда заканчивается на $0$ в двоичной системе.
  • Нечетное — на $1$.
  • Если десятичное число делится на 16 без остатка, в HEX оно будет заканчиваться на $0$.

Частая ловушка: Путаница с нумерацией степеней. Помните: правая цифра всегда имеет степень $0$ ($x^0 = 1$), следующая слева — степень $1$ и так далее. Ошибка здесь приводит к неверному результату во всех последующих вычислениях.

Частые ошибки при переводе

  1. Использование недопустимых цифр.

    • В двоичной системе могут быть только 0 и 1. Цифра 2 там невозможна.
    • В восьмеричной нет 8 и 9.
    • В HEX нет букв после F. Проверка: Просканируйте исходное число. Если видите «запрещенную» цифру, условие задачи некорректно или вы ошиблись при записи.
  2. Неверный порядок остатков. При делении «уголком» остатки записываются справа налево (последний полученный остаток — самая старшая цифра). Новички часто записывают их в порядке получения (слева направо), получая перевернутое число.

  3. Ошибки в значениях HEX-букв. Забывание того, что $A=10$, а не 11. Легкий способ запомнить: $A$ — первая буква, значит, первое число после 9.

  4. Потеря ведущих нулей при группировке. При переводе из двоичной в HEX число $111_2$ должно быть дополнено до тетрады: $0111_2 = 7_{16}$. Если забыть ноль, можно ошибиться в разбиении длинных чисел.

FAQ

Вопрос: Можно ли переводить дробные числа? Ответ: Да. Целая часть делится на основание, а дробная часть умножается на основание системы. Цифры целой части собираются снизу вверх, дробной — сверху вниз в порядке получения.

Вопрос: Почему в программировании часто используют именно 16-ричную систему? Ответ: Одна HEX-цифра точно соответствует 4 битам (тетраде). Это позволяет компактно записывать байты (2 HEX-цифры = 1 байт = 8 бит) и легко конвертировать их в машинный код глазами.

Вопрос: Как быстро перевести из 8-ричной в 16-ричную? Ответ: Лучше всего сделать промежуточный шаг через двоичную систему.

  1. Разверните каждую восьмеричную цифру в 3 бита.
  2. Соберите общее двоичное число.
  3. Разбейте его на группы по 4 бита для HEX. Прямой перевод через деление возможен, но неудобен из-за разных степеней двойки.