Шестнадцатеричная система счисления
Двоичная запись честно отражает биты, но длинна: адрес 0x40021000 — это 32 нуля и единицы. Шестнадцатеричная система сжимает её вчетверо, не теряя связи с битами: каждая цифра — ровно четыре бита.
Обновлено Редакция GAW
Шестнадцатеричная система счисления (hexadecimal, hex) — позиционная система с основанием 16. Цифры — 0–9 и латинские буквы A–F, обозначающие значения 10–15; вес каждого разряда в 16 раз больше соседнего справа. По Kuphaldt, восьмеричная и шестнадцатеричная системы существуют ради одного: сокращённой записи двоичных чисел — основания 8 и 16 являются степенями двойки, поэтому перевод делается группами бит без вычислений.
Одна цифра — четыре бита
| Hex | Двоичная | Десятичная | Hex | Двоичная | Десятичная |
|---|---|---|---|---|---|
| 0 | 0000 | 0 | 8 | 1000 | 8 |
| 1 | 0001 | 1 | 9 | 1001 | 9 |
| 2 | 0010 | 2 | A | 1010 | 10 |
| 3 | 0011 | 3 | B | 1011 | 11 |
| 4 | 0100 | 4 | C | 1100 | 12 |
| 5 | 0101 | 5 | D | 1101 | 13 |
| 6 | 0110 | 6 | E | 1110 | 14 |
| 7 | 0111 | 7 | F | 1111 | 15 |
Перевод из двоичной: разбить биты на четвёрки от младшего разряда и заменить каждую цифрой. Пример Kuphaldt: 10110111₂ = 1011 0111 = B7₁₆ = 183. Обратно — каждую цифру расписать четырьмя битами. В десятичную — сумма цифр, умноженных на степени 16: B7 = 11 · 16 + 7 = 183.
Почему это удобно в электронике
- Байт — две цифры. 0x00–0xFF, 16-битное слово — четыре цифры, 32-битный адрес — восемь. Дампы памяти и файлов прошивки выводят именно так — см. просмотрщик hex-дампа.
- Биты видны сразу. Маска 0x0F — младшая тетрада, 0x80 — старший бит байта, 0x20 — бит 5. Маски удобно проверять в калькуляторе битовых масок.
- Адреса регистров. Карты памяти и описания регистров в даташитах даются в hex, часто с суффиксом h: 00h, 0Fh.
Не надо путать hex с двоично-десятичным кодом: 0x59 как BCD означает 59, а как обычное число — 89. И помнить о порядке байтов: многобайтное значение 0x12345678 в памяти little-endian лежит как 78 56 34 12.
Перевести число между системами можно в конвертере систем счисления, а набить руку — в тренажёре по системам счисления.
Частые вопросы
Как перевести двоичное число в hex группами по четыре бита?
Разбить биты на группы по четыре от младшего разряда, дополнив старшую группу нулями, и заменить каждую группу цифрой 0–F. 1011 0111 — это B7. Kuphaldt показывает тот же приём для дробной части: группы отсчитывают от двоичной точки в обе стороны, и 10110111,1₂ = B7,8₁₆.
Что означают 0x и h в записи числа?
Это способы показать, что число шестнадцатеричное. В C и большинстве современных языков пишут префикс 0x — 0x1F. В даташитах часто ставят суффикс h: адреса регистров записывают как 00h, 0Fh. Математическая запись — индекс 16: 1F₁₆.
Почему в электронике используют hex, а не восьмеричную систему?
Потому что байт — восемь бит, а это ровно две шестнадцатеричные цифры. Восьмеричная цифра кодирует три бита, и байт в неё не укладывается ровно. Kuphaldt описывает обе системы как сокращённую запись двоичных чисел, но для байтовой памяти удобнее шестнадцатеричная.
Источники
- Kuphaldt T. R. Lessons In Electric Circuits, Vol. IV — Digital, ch. 1 «Numeration Systems», разд. «Octal and hexadecimal numeration» и «Octal and hexadecimal to decimal conversion» (CC BY) — основание системы — число цифр и множитель веса разряда; восьмеричная — основание 8, цифры 0–7; шестнадцатеричная — основание 16, цифры 0–9 и A–F; счёт до двадцати: 16 = 10000₂ = 20₈ = 10₁₆; главное назначение — сокращённая запись двоичных чисел, потому что 8 и 16 — степени двойки; перевод группами по 3 и по 4 бита от двоичной точки с дополнением нулями: 10110111,1₂ = 267,4₈ = B7,8₁₆
- Kuphaldt T. R. Lessons In Electric Circuits, Vol. IV — Digital, ch. 8 «Karnaugh Mapping», разд. «Don't care cells in the Karnaugh map» (CC BY) — четырёхбитные коды шестнадцатеричных цифр Ah–Fh (1010–1111) не являются допустимыми кодами BCD — пример того, как hex и BCD используют одни и те же тетрады по-разному
Нашли ошибку?
Смотрите также
- Конвертер HEX, BIN, DECДополнительный код, float, байты и биты
- Тренажёр: BIN, HEX, доп. кодПеревод, дополнительный код, AND/OR/XOR и сдвиги
- Просмотр Intel HEXЗаписи HEX и S19, контрольные суммы, карта памяти, дамп, HEX ↔ BIN
- Двоично-десятичный код (BCD)Каждая десятичная цифра — в своих четырёх битах
- Порядок байтовLittle-endian и big-endian в памяти и протоколах
- Битовые маскиПоле регистра: маска, сдвиг, чтение и запись, код на C