Основное правило перевода
Перевод из двоичной в шестнадцатеричную систему выполняется группировкой битов по четыре. Это возможно потому, что шестнадцатеричное основание является степенью двойки:
16 = 2⁴
Следовательно, одна шестнадцатеричная цифра полностью соответствует одной группе из четырёх двоичных разрядов. Достаточно разбить число на тетрады, сопоставить каждой тетраде символ от 0 до F, а затем соединить результаты.
Таблица соответствий
| Двоичная группа | Hex-символ | Двоичная группа | Hex-символ |
|---|---|---|---|
0000 | 0 | 1000 | 8 |
0001 | 1 | 1001 | 9 |
0010 | 2 | 1010 | A |
0011 | 3 | 1011 | B |
0100 | 4 | 1100 | C |
0101 | 5 | 1101 | D |
0110 | 6 | 1110 | E |
0111 | 7 | 1111 | F |
Буквы A–F обозначают значения от 10 до 15. Регистр не влияет на значение: A и a — одна и та же шестнадцатеричная цифра.
Пошаговый алгоритм
- Запишите двоичное число.
- Разделите его на группы по четыре разряда, начиная справа.
- Если левая группа содержит меньше четырёх битов, добавьте перед ней нули.
- Найдите для каждой группы соответствующий символ в таблице.
- Запишите символы подряд слева направо.
Пример 1: число 101101₂
Разбиваем запись справа налево:
10 1101
В первой группе не хватает двух разрядов, поэтому дополняем её слева:
0010 1101
По таблице:
0010 → 2
1101 → D
Ответ:
101101₂ = 2D₁₆
Префикс 0x часто используют в программировании для обозначения шестнадцатеричного числа. В таком формате результат будет записан как 0x2D.
Пример 2: длинная двоичная запись
Преобразуем число:
110101111001₂
Группировка уже не требует дополнения:
1101 0111 1001
Замена групп:
1101 → D
0111 → 7
1001 → 9
Получаем:
110101111001₂ = D79₁₆
Пример 3: неполная группа
Пусть дано число:
111₂
Добавляем один ноль слева:
0111
Группа 0111 соответствует цифре 7, поэтому:
111₂ = 7₁₆
Добавленные нули не меняют числового значения.
Почему не нужно сначала переводить число в десятичное
Можно использовать промежуточный способ:
- перевести двоичное число в десятичное;
- разделить десятичное число на 16 с остатками;
- заменить остатки от 10 до 15 буквами
A–F.
Однако для перевода между основаниями 2 и 16 этот метод избыточен. Прямая группировка быстрее, проще и особенно удобна для длинных последовательностей битов. Она также уменьшает количество промежуточных вычислений и вероятность ошибки.
Перевод двоичной дроби
Для чисел с двоичной точкой применяется то же соответствие, но группы формируются по разные стороны от точки:
- целую часть группируют справа налево;
- дробную часть — слева направо;
- неполную группу в дробной части дополняют нулями справа.
Например:
110,1011₂
Целая часть 110 превращается в 0110, а дробная уже содержит четыре разряда:
0110,1011
Соответствие:
0110 → 6
1011 → B
Результат:
110,1011₂ = 6,B₁₆
В компьютерной записи вместо запятой обычно используют точку: 6.B₁₆.
Как проверить результат
Для обратной проверки замените каждый символ шестнадцатеричного числа на четыре бита. Например:
3A7₁₆
расшифровывается так:
3 → 0011
A → 1010
7 → 0111
Получаем:
0011 1010 0111₂
Начальные нули можно убрать:
1110100111₂
Если исходная двоичная запись совпадает с этим числом, перевод выполнен правильно.
Частые ошибки
- Группировка слева направо. Отсчёт всегда начинают с правого края целой части.
- Удаление нулей внутри группы. Нельзя менять
0101на101: это разные по длине группы, хотя в данном случае значение одинаково только после правильного выравнивания. - Путаница букв и цифр. После
9идутA,B,C,D,E,F, а не десятичные числа 10–15. - Неверное дополнение дробной части. Справа от двоичной точки нули добавляют справа, а не слева.
- Смешение префиксов.
0bобычно обозначает двоичную запись, а0x— шестнадцатеричную. Эти обозначения не входят в само значение числа. - Игнорирование знака. Для отрицательного числа знак «минус» сохраняется:
-1010₂ = -A₁₆.
В компьютерных системах отдельное внимание требуется для знаковых целых чисел. Одна и та же последовательность битов может интерпретироваться как беззнаковое число или как число в дополнительном коде. Поэтому при работе с машинным представлением важно учитывать разрядность и тип данных.
Где используется шестнадцатеричная запись
Шестнадцатеричная система делает длинные двоичные последовательности компактнее:
- одна hex-цифра содержит четыре бита;
- две hex-цифры соответствуют одному байту;
- байты удобно читать при отладке программ и анализе файлов;
- шестнадцатеричная форма используется в адресах, машинном коде и цветах веб-страниц.
Например, байт 11111111₂ записывается как FF₁₆, а последовательность 11110000 10101010 01010101₂ — как F0AA55₁₆. Обратное преобразование выполняется по той же таблице: каждый символ заменяется четырьмя битами.