Перевод из десятичной системы в шестнадцатеричную (HEX) часто нужен в программировании. Разберём формулу, пошаговый метод деления на 16 и примеры расчёта.
Калькулятор выше мгновенно выдаст hex-значение, но понимание алгоритма помогает проверить результат и избежать типичных ошибок.
Алгоритм перевода из десятичной системы в шестнадцатеричную
Основа перевода — последовательное деление исходного десятичного числа на 16. На каждом шаге фиксируют целую часть частного и остаток от деления. Остаток — это значение младшего разряда будущего hex-числа. Деление повторяют, пока частное не станет равным нулю. Затем все остатки выписывают в обратном порядке: от последнего к первому. Полученная последовательность и есть результат в шестнадцатеричной системе.
Формально алгоритм записывают так:
d₀ = N mod 16— первый остаток;N ← ⌊N / 16⌋— целая часть от деления становится новым числом;- шаг повторяют, получая
d₁,d₂, …,dₖ, покаN > 0; - итог:
(dₖ … d₁ d₀)₁₆.
Здесь mod — остаток от деления, а ⌊⌋ — взятие целой части.
Таблица hex-символов для остатков
В шестнадцатеричной системе не хватает арабских цифр для значений больше 9, поэтому используют латинские буквы.
| Остаток (dec) | Hex-символ | Пример |
|---|---|---|
| 0–9 | 0–9 | 7 → 7 |
| 10 | A | 10 → A |
| 11 | B | 11 → B |
| 12 | C | 12 → C |
| 13 | D | 13 → D |
| 14 | E | 14 → E |
| 15 | F | 15 → F |
Пример: переводим 7562 из 10 в 16
Возьмём число 7562₁₀ и последовательно разделим его на 16.
| Шаг | Деление | Частное | Остаток (dec) | Hex |
|---|---|---|---|---|
| 1 | 7562 / 16 | 472 | 10 | A |
| 2 | 472 / 16 | 29 | 8 | 8 |
| 3 | 29 / 16 | 1 | 13 | D |
| 4 | 1 / 16 | 0 | 1 | 1 |
Теперь выписываем остатки снизу вверх: 1, D, 8, A. Результат: 1D8A₁₆.
Проверка обратным переводом:
1×4096 + 13×256 + 8×16 + 10 = 4096 + 3328 + 128 + 10 = 7562₁₀.
Ещё пример: число 255 и степени 16
Для числа 255₁₀:
255 / 16 = 15, остаток15 → F;15 / 16 = 0, остаток15 → F.
Итог: FF₁₆. Это максимальное значение одного байта, поэтому FF часто встречается в коде и при работе с цветами.
Степени основания 16 помогают быстро оценивать разряды:
16⁰ = 116¹ = 1616² = 25616³ = 409616⁴ = 65536
Например, 4096₁₀ = 1000₁₆, а 65536₁₀ = 10000₁₆.
Как переводить дробные числа
Целую часть числа переводят обычным делением на 16. Дробную часть умножают на 16: целая часть произведения становится очередным hex-разрядом после точки, а новую дробную часть снова умножают на 16. Расчёт повторяют до нужной точности.
Пример: 0,5₁₀ × 16 = 8,0. Целая часть 8, дробная часть 0, значит 0,5₁₀ = 0,8₁₆. Для более сложных дробей удобно сразу задать точность в конвертере выше.
Где применяется шестнадцатеричная запись
- Цвета в вебе и дизайне. Код
#RRGGBBсостоит из трёх hex-пар:00— минимум,FF— максимум канала. - Адресация и отладка. Адреса памяти и указатели часто записывают как
0x7FFE,0x00400000. - Машинные коды и дампы. Байты удобно читать парами hex-символов.
- Хэши, контрольные суммы, идентификаторы. Hex компактнее двоичного кода и понятнее десятичного при анализе битов.
Частые ошибки при переводе
- Прямой порядок вместо обратного. Остатки нужно выписывать от последнего к первому, а не сверху вниз.
- Запись
10вместоA. Остаток 10 — это hex-символA, а не две цифры1и0. - Незавершённое деление. Алгоритм останавливают только тогда, когда частное стало
0. - Потеря точности у дробей. Нужно заранее решить, сколько hex-знаков после точки оставить, и не округлять без указания точности.
- Путаница в регистре. Символы
A–Fиa–fозначают одно и то же, но в коде и документации обычно используют прописные буквы.