Шестнадцатеричная система счисления: язык программистов
Байт 01101110 прочитает не каждый программист, а вот 0x6E — почти любой. Шестнадцатеричная система (hex) — это не ещё одна «математика», а компактная стенограмма двоичной записи: она существует только для того, чтобы люди не путались в длинных строках из нулей и единиц. Разберёмся, почему одна hex-цифра — это ровно четыре бита и как переводить числа взглядом.
Зачем нужна ещё одна система
Двоичная запись честна к железу, но тяжела для глаз: байт — восемь знаков, два байта — шестнадцать, и всё из 0 и 1. Десятичная запись компактна, но глуха к железу: чтобы понять, какие биты стоят в числе 254, придётся делить с остатком.
Шестнадцатеричная система — компромисс: 16 = 2⁴, поэтому каждая hex-цифра отображается на четыре бита разом, без вычислений. Перевод hex ↔ двоичная — это не арифметика, а перекодировка: взял тетраду, посмотрел в табличку из 16 строк.
Одна цифра — четыре бита
Цифры hex: 0–9 и буквы A–F (A = 10, B = 11, … F = 15). Шестнадцать значений — ровно столько, сколько в четырёх битах. Привычка к шестнадцати цифрам вырабатывается быстро:
| Двоичная тетрада | Hex | Десятичное |
|---|---|---|
| 0000 | 0 | 0 |
| 0011 | 3 | 3 |
| 0110 | 6 | 6 |
| 1000 | 8 | 8 |
| 1010 | A | 10 |
| 1111 | F | 15 |
Перевод на пальцах
Hex → двоичная. Разбейте число на цифры и замените каждую тетрадой: 0x6E → 6 = 0110, E = 1110 → 01101110. Никакого сложения.
Двоичная → hex. Разбейте биты на четвёрки справа (для байта — просто пополам) и замените каждую четвёрку цифрой: 10110011 → 1011 = B, 0011 = 3 → 0xB3.
Hex → десятичная. Вот тут уже арифметика: старшая цифра умножается на 16. 0x6E = 6·16 + 14 = 96 + 14 = 110. Для байта есть шпаргалка: старшая цифра — столько-то раз по 16, младшая — как есть.
0xFF, маски и цвета
Байт с восемью единицами, 11111111, — это 0xFF, то есть 255. В курсе этот байт встречается постоянно: маска RAM_SEL8 из статьи о шине — это 0xFF, когда RAM разрешено говорить, и 0x00, когда она молчит. Порты дисплея и геймпада — адреса 0xFA–0xFF из статьи про память и ввод-вывод.
Та же система за пределами схемотехники: цвета в вебе — это три байта в hex (#FF7A00 — оранжевый: красный FF, зелёный 7A, синий 00). Научившись читать hex, вы научились читать половину технической документации.
Потренируйтесь: конвертер систем счисления переводит двоичное, десятичное и шестнадцатеричное в обе стороны, включая дополнительный код для отрицательных чисел.
Проверь себя
Почему одна hex-цифра — это ровно четыре бита?
Потому что 16 = 2⁴: шестнадцать значений цифры совпадают с количеством комбинаций четырёх битов.
Переведите 0xA3 в двоичную запись.
A = 1010, 3 = 0011, значит 0xA3 = 10100011.
Чему равно 0xFF в десятичной системе и почему это важно для байта?
15·16 + 15 = 255. Это максимум байта: все восемь бит равны 1, «включены» все провода.