Перевод чисел из шестнадцатеричной в десятичную систему счисления¶
Перевод чисел из шестнадцатеричной в десятичную систему счисления — это математическая операция приведения числа, записанного в позиционной шестнадцатеричной системе счисления (основание 16), к его эквиваленту в десятичной системе (основание 10). Шестнадцатеричная система широко применяется в информатике для записи машинных кодов, адресов памяти, цветовых значений и байтовых данных, поэтому перевод между этими системами является одной из базовых операций при работе с низкоуровневыми данными.
¶Основы позиционных систем счисления
В позиционной системе счисления значение числа определяется не только цифрами, но и их позициями. Каждая цифра в числе умножается на основание системы в степени, соответствующей её порядковому номеру, отсчитываемому справа налево, начиная с нуля.
В десятичной системе основание равно 10 и используются цифры от 0 до 9. В шестнадцатеричной системе (сокращённо hex, обозначение 0x или префикс 16#) основание равно 16, поэтому помимо цифр 0–9 используются латинские буквы A, B, C, D, E и F, соответствующие значениям от 10 до 15. Запись шестнадцатеричного числа может выглядеть как 0x1A3F, 1A3F₁₆ или 16#1A3F#.
¶Формула перевода
Перевод из шестнадцатеричной системы в десятичную выполняется по общей формуле позиционного разложения. Если шестнадцатеричное число состоит из цифр dₙ dₙ₋₁ … d₁ d₀, то его десятичное значение вычисляется как:
D = dₙ × 16ⁿ + dₙ₋₁ × 16ⁿ⁻¹ + … + d₁ × 16¹ + d₀ × 16⁰
Здесь каждая буквенная цифра предварительно заменяется её числовым эквивалентом: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.
¶Пошаговый пример
Рассмотрим перевод числа 1A3F₁₆ в десятичную систему.
- Записываем цифры числа и определяем их позиции (нумерация с нуля справа налево): 1 (позиция 3), A (позиция 2), 3 (позиция 1), F (позиция 0).
- Заменяем буквы числовыми значениями: A = 10, F = 15. Получаем последовательность 1, 10, 3, 15.
- Вычисляем вклад каждой позиции:
- 1 × 16³ = 1 × 4096 = 4096
- 10 × 16² = 10 × 256 = 2560
- 3 × 16¹ = 3 × 16 = 48
- 15 × 16⁰ = 15 × 1 = 15
- Складываем результаты: 4096 + 2560 + 48 + 15 = 4719.
Итак, 1A3F₁₆ = 4719₁₀.
¶Метод Горнера
Для длинных чисел удобен метод Горнера (последовательного умножения и сложения), который позволяет обойтись без вычисления больших степеней. Алгоритм: берётся начальное значение 0, затем последовательно для каждой цифры слева направо текущее значение умножается на 16 и прибавляется числовое значение очередной цифры.
Для числа 1A3F₁₆:
- Начальное значение: 0
- Цифра 1: 0 × 16 + 1 = 1
- Цифра A (10): 1 × 16 + 10 = 26
- Цифра 3: 26 × 16 + 3 = 419
- Цифра F (15): 419 × 16 + 15 = 4719
Результат совпадает: 4719₁₀.
¶Перевод дробных чисел
Для дробной части шестнадцатеричного числа (записываемой после запятой или точки) используется обратный принцип: каждая цифра после запятой умножается на 16 в отрицательной степени. Так, 0.C8₁₆ переводится как C × 16⁻¹ + 8 × 16⁻² = 12/16 + 8/256 = 0.75 + 0.03125 = 0.78125₁₀.
¶Автоматические средства перевода
Помимо ручного вычисления, перевод выполняется с помощью встроенных средств операционных систем и языков программирования:
- Калькулятор Windows в режиме «Программист» позволяет вводить шестнадцатеричные числа и мгновенно видеть десятичное значение.
- В языке Python функция
int('1A3F', 16)преобразует шестнадцатеричную строку в целое десятичное число. - В языке JavaScript используется конструкция
parseInt('1A3F', 16). - В языке C и производных языках шестнадцатеричные константы записываются с префиксом
0x(например,0x1A3F) и автоматически интерпретируются компилятором как числа. - В языке PHP применяется функция
hexdec(). - В оболочке Bash шестнадцатеричные значения можно преобразовать командой
$((0x1A3F)).
¶Обратная задача
Перевод из десятичной системы в шестнадцатеричную выполняется последовательным делением числа на 16 с записью остатков. Остатки читаются снизу вверх и преобразуются: значения от 10 до 15 заменяются буквами A–F. Например, для числа 4719: 4719 ÷ 16 = 294 (остаток 15 → F), 294 ÷ 16 = 18 (остаток 6), 18 ÷ 16 = 1 (остаток 2), 1 ÷ 16 = 0 (остаток 1). Чтение остатков снизу вверх даёт 126F₁₆.
¶Применение
Шестнадцатеричная запись используется при программировании для задания констант, при отладке программ (отображение содержимого памяти в hex-дампах), в веб-разработке для кодирования цветов (например, #FF5733 обозначает цвет с компонентами R=255, G=87, B=51), в протоколах передачи данных и файловых форматах. Умение быстро переводить между системами счисления необходимо при анализе сетевых протоколов, работе с файловыми структурами и чтении документации на оборудование.
Источники:
- Кнут Д. «Искусство программирования», том 2: «Получисловые алгоритмы»
- Бартон Р. С., Флаудер Н. Д. «Числительные системы»
- Руднев А. П. «Справочник по математике для инженеров и студентов»
- Документация языков программирования Python, JavaScript и C
