Шестнадцатеричная система в одном предложении
Шестнадцатеричная система — это позиционная система счисления с основанием 16: каждая цифра весит в 16 раз больше, чем цифра справа от неё, а значения от 10 до 15 записываются буквами от A до F. Чтобы показать, что число шестнадцатеричное, программисты пишут 0x1A (C, Java, JavaScript, Python), #1A2B3C для цветов в CSS, 1Ah в ассемблере или 1A₁₆ в математике.
Таблица шестнадцатеричных цифр от 0 до 15
| Десятичное | Hex | Двоичное | Десятичное | Hex | Двоичное |
|---|---|---|---|---|---|
| 0 | 0 | 0000 | 8 | 8 | 1000 |
| 1 | 1 | 0001 | 9 | 9 | 1001 |
| 2 | 2 | 0010 | 10 | A | 1010 |
| 3 | 3 | 0011 | 11 | B | 1011 |
| 4 | 4 | 0100 | 12 | C | 1100 |
| 5 | 5 | 0101 | 13 | D | 1101 |
| 6 | 6 | 0110 | 14 | E | 1110 |
| 7 | 7 | 0111 | 15 | F | 1111 |
Как считать в шестнадцатеричной системе
В hex считают так же, как в десятичной системе, только перенос в следующий разряд происходит после F, а не после 9: … 8, 9, A, B, C, D, E, F, 10, 11 … 19, 1A … 1F, 20 … FF, 100. Здесь 10 означает шестнадцать, а 100 — 16 × 16 = 256. Две hex-цифры охватывают один байт (00–FF = 0–255), четыре цифры — до FFFF = 65 535, восемь — до FFFFFFFF = 4 294 967 295.
Зачем компьютерам шестнадцатеричная система
Компьютеры хранят всё в двоичном виде, но длинные цепочки нулей и единиц людям трудно читать и легко ввести с ошибкой. Поскольку 16 = 2⁴, одна hex-цифра соответствует ровно четырём битам (тетраде), а две hex-цифры — одному байту. Перевод между hex и двоичной системой сводится к простой замене цифр по таблице, а запись в hex вчетверо короче: 1101 1110 1010 1101 — это просто DEAD. У десятичной системы такой удобной связи с двоичной нет, поэтому для «сырых» данных её используют редко.
Перевод из шестнадцатеричной системы в десятичную и обратно
- Из hex в десятичную: умножьте каждую цифру на соответствующую степень 16 и сложите:
2F= 2 × 16 + 15 = 47, а1A3F= 1 × 4096 + 10 × 256 + 3 × 16 + 15 = 6719. - Из десятичной в hex: последовательно делите на 16 и выпишите остатки в обратном порядке: 200 ÷ 16 = 12, остаток 8, а 12 = C, поэтому 200 =
C8. - Из hex в двоичную: замените каждую цифру её 4 битами:
2F=0010 1111.
Наши конвертеры делают всё это мгновенно и показывают каждый шаг.
Где применяется шестнадцатеричная система
- Цвета на сайтах:
#FF6347— это красныйFF, зелёный63и синий47. - Адреса памяти: отладчики и отчёты о сбоях показывают указатели вида
0x7FFE5A3C. - MAC-адреса: шесть байтов, например
00:1A:2B:3C:4D:5E, идентифицируют сетевую карту. - Адреса IPv6: восемь групп по четыре hex-цифры, например
2001:db8::1. - Unicode: у каждого символа есть шестнадцатеричный код —
U+00E9— это é, аU+1F600— 😀. - Хеши и идентификаторы: хеш SHA-256 состоит из 64 hex-символов, а UUID и идентификаторы коммитов Git записываются в hex.
- Hex-дампы: hex-редакторы показывают содержимое файла побайтно; каждый PDF начинается с
25 50 44 46(«%PDF»). - Коды ошибок: Windows сообщает об ошибках вроде
0x80070005(отказано в доступе).
Сравнение шестнадцатеричной, десятичной, восьмеричной и двоичной систем
| Система | Основание | Цифры | Запись числа 255 | Типичное применение |
|---|---|---|---|---|
| Двоичная | 2 | 0–1 | 11111111 | Аппаратура, битовые флаги |
| Восьмеричная | 8 | 0–7 | 377 | Права доступа к файлам в Unix (chmod 755) |
| Десятичная | 10 | 0–9 | 255 | Числа в повседневной жизни |
| Шестнадцатеричная | 16 | 0–9, A–F | FF | Байты, цвета, адреса, хеши |
Отрицательные числа в hex
В самой шестнадцатеричной системе нет особого знака, поэтому отрицательные числа обычно хранят в дополнительном коде: старший бит значения фиксированного размера показывает, что оно отрицательное. Как байт со знаком 7F — это 127, 80 — −128, а FF — −1; как 32-битное целое FFFFFFFF — это −1. В математике и в нашем калькуляторе можно и просто поставить минус: −1A = −26.
Часто задаваемые вопросы
Почему в шестнадцатеричной системе есть буквы?
Для основания 16 нужно шестнадцать односимвольных цифр, а арабских цифр всего десять. Буквы A–F обозначают значения 10–15. Заглавные и строчные буквы равнозначны: ff = FF = 255.
Что означает 0x перед числом?
Этот префикс обозначает шестнадцатеричное число в C, C++, Java, JavaScript, Python и многих других языках: 0x10 — это 16, а не десять. В CSS для цветов вместо него используется #, а в ассемблере часто добавляют суффикс h (10h).
Hex и Base64 — это одно и то же?
Нет. Hex записывает каждый байт двумя символами из 0–9 и A–F, поэтому объём данных удваивается, зато их легко читать побайтно. Base64 использует 64 символа и упаковывает 3 байта в 4 символа — это компактнее (около 33 % накладных расходов), но побайтно такие данные не прочитать.
Обновлено: