Основы конвертации чисел: от десятичной к шестнадцатеричной

Иван Корнев·11.04.2026·4 мин

Чтобы перевести десятичное число в шестнадцатеричное, нужно последовательно делить его на 16 и записывать остатки в обратном порядке. Для обратного перевода (из Hex в DEC) каждую цифру умножают на 16 в степени её позиции и суммируют результаты. Эти операции фундаментальны для работы с памятью, цветами в веб-дизайне и низкоуровневым программированием.

Понимание систем счисления

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

  • Десятичная (Decimal, Base-10): Использует цифры от 0 до 9. Каждая позиция представляет степень числа 10. Это привычная нам система счета.
  • Шестнадцатеричная (Hexadecimal, Hex, Base-16): Использует 16 символов: цифры 0–9 и буквы A–F.
    • Цифры 0–9 соответствуют значениям 0–9.
    • Буквы A–F соответствуют значениям 10–15 (A=10, B=11, C=12, D=13, E=14, F=15).

Зачем это нужно? Одна шестнадцатеричная цифра кодирует ровно 4 бита (полубайт). Это делает Hex идеальным форматом для компактной записи двоичных данных, адресов памяти и цветовых кодов (например, #FF5733).

Алгоритм перевода из десятичной в шестнадцатеричную (DEC → HEX)

Этот метод основан на последовательном делении.

  1. Разделите исходное десятичное число на 16.
  2. Запишите остаток от деления. Если остаток больше 9, замените его соответствующей буквой (10→A, ..., 15→F).
  3. Возьмите полученное частное (целую часть результата деления) и повторите шаг 1.
  4. Продолжайте деление, пока частное не станет равным 0.
  5. Важно: Запишите все полученные остатки в порядке от последнего к первому (справа налево).

Пример расчета: число 439

ШагДелениеЧастноеОстатокСимвол
1439 ÷ 162777
227 ÷ 16111B
31 ÷ 16011

Собираем остатки снизу вверх: 1, B, 7. Результат: 0x1B7 или просто 1B7.

Алгоритм перевода из шестнадцатеричной в десятичную (HEX → DEC)

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

Формула: $Value = \sum (Digit_i \times 16^i)$

  1. Пронумеруйте позиции цифр справа налево, начиная с 0.
  2. Преобразуйте буквы в числа (A=10, ..., F=15).
  3. Умножьте каждую цифру на 16 в степени её позиции.
  4. Сложите полученные произведения.

Пример расчета: число 0x1A3

Разберем число по разрядам (справа налево):

  • 3 (позиция 0): $3 \times 16^0 = 3 \times 1 = 3$
  • A (позиция 1, значение 10): $10 \times 16^1 = 10 \times 16 = 160$
  • 1 (позиция 2): $1 \times 16^2 = 1 \times 256 = 256$

Сумма: $256 + 160 + 3 = 419$. Результат: 419.

Быстрая проверка Для простых чисел можно использовать калькулятор в режиме программиста (стандартный в Windows или macOS). Переключите режим на «Dec», введите число, затем на «Hex» — результат появится мгновенно. Используйте это для верификации ручных расчетов.

Таблица соответствия для быстрой конвертации малых чисел

Для чисел от 0 до 255 (один байт) полезно знать основные соответствия наизусть или иметь под рукой шпаргалку.

DecHexDecHexDecHex
00322012880
10A6440200C8
15F10064255FF
16101277F256100

Автоматизация в программировании

В реальной разработке ручной счет используется редко, но понимание алгоритма критически важно для отладки. Большинство языков имеют встроенные средства конвертации:

  • Python:
    • DEC → HEX: hex(439) вернет '0x1b7'.
    • HEX → DEC: int('1A3', 16) вернет 419.
  • JavaScript:
    • DEC → HEX: (439).toString(16) вернет '1b7'.
    • HEX → DEC: parseInt('1A3', 16) вернет 419.
  • C/C++:
    • Использование спецификаторов формата в printf: %x для вывода в HEX, %d для DEC.

Частые ошибки

При работе с системами счисления новички часто допускают следующие промахи:

  1. Неверный порядок записи остатков. Самая распространенная ошибка при переводе DEC → HEX — запись остатков в порядке их получения (слева направо), а не в обратном. Помните: последний остаток — это старший разряд.
  2. Путаница с буквами. Ошибочное присвоение значений буквам (например, считать, что A=11). Запомните: A начинается с 10.
  3. Игнорирование регистра. В некоторых системах 0xFF и 0xff равнозначны, но в строковых сравнениях или специфических протоколах регистр может иметь значение. Стандарт де-факто — использовать заглавные буквы для читаемости.
  4. Пропуск префикса. При записи в коде часто забывают префикс 0x, из-за чего компилятор может воспринять число как десятичное или выдать ошибку синтаксиса.

FAQ

Вопрос: Как перевести дробное число в шестнадцатеричную систему? Ответ: Целая часть переводится делением, как описано выше. Дробная часть умножается на 16. Целая часть произведения записывается как следующий знак после запятой. Процесс повторяется с новой дробной частью до достижения нужной точности или обнуления.

Вопрос: Почему в цветах используют именно 6 знаков (например, #FFFFFF)? Ответ: Каждый цвет (Red, Green, Blue) кодируется одним байтом (0–255). Один байт в шестнадцатеричной системе записывается двумя цифрами (от 00 до FF). Три канала по 2 знака дают итоговые 6 символов.

Вопрос: Есть ли разница между 0x10 и 10? Ответ: Да, огромная. 10 в десятичной системе — это десять. 0x10 в шестнадцатеричной — это $1 \times 16 + 0 = 16$ в десятичной системе. Всегда обращайте внимание на основание системы.