Конвертер из двоичной в 16-ричную
Результат
Шестнадцатеричное
- Сгруппировано по четыре
- 1011 0010
Конвертер из двоичной системы в 16-ричную переписывает число из основания два в основание шестнадцать. Это самый простой перевод в этом семействе, потому что вычислять здесь нечего: одна 16-ричная цифра вмещает ровно четыре двоичные, поэтому вся работа состоит в том, чтобы разрезать двоичную строку на группы по четыре справа и прочитать каждую группу как одну цифру. Число 10110010 распадается на 1011 и 0010, это B и 2, значит ответ B2. Именно это жёсткое отношение четыре к одному и есть причина, по которой 16-ричная система вообще существует: байт — это восемь битов, то есть ровно две 16-ричные цифры, а 16-битный адрес — ровно четыре, и потому машинный код, значения цвета и адреса памяти программисты записывают в этом основании, а не в двоичном. Страница печатает использованное разбиение под ответом, потому что разбиение и есть перевод. Если число цифр не кратно четырём, левую группу дополняют нулями до четырёх: 10110 превращается в 0001 0110, то есть в 16. Эти нули не меняют значение, они меняют только разбиение. Обе строки панели — машинные записи, и это стоит заметить сразу. Строка 16-ричного ответа и строка разбиения печатаются ровно теми символами, какими их считает программа: буквы в ответе всегда заглавные, разряды внутри группы не разделяются ничем, а группы разделены обычным пробелом. Ни одна из этих двух строк не проходит через локализацию, и разделителей разрядов, принятых в русской записи чисел, в них нет. Практическое следствие одно: перенося ответ в другое поле, набирайте его подряд, без пробелов и разделителей, — поля ввода в этом семействе разделителей не принимают. Ввод принимается длиной до 53 двоичных цифр, то есть до 9 007 199 254 740 991 — это 16 цифр в десятичной записи и 14 в 16-ричной. За этой границей машина перестаёт различать соседние целые числа, и слишком длинный ввод отклоняется, а не округляется.
Все шестнадцать четырёхбитных групп и 16-ричная цифра, которую каждая из них обозначает
| Полубайт | 16-ричная цифра | Десятичное |
|---|---|---|
| 0000 | 0 | 0 |
| 0001 | 1 | 1 |
| 0010 | 2 | 2 |
| 0011 | 3 | 3 |
| 0100 | 4 | 4 |
| 0101 | 5 | 5 |
| 0110 | 6 | 6 |
| 0111 | 7 | 7 |
| 1000 | 8 | 8 |
| 1001 | 9 | 9 |
| 1010 | A | 10 |
| 1011 | B | 11 |
| 1100 | C | 12 |
| 1101 | D | 13 |
| 1110 | E | 14 |
| 1111 | F | 15 |
Это весь перевод, выписанный целиком. Каждая четырёхбитная группа, какая только бывает, встречается здесь ровно один раз, поэтому в момент использования вычислять уже нечего: таблица замкнута, и читатель, просмотревший её однажды, прочитает любую двоичную строку в этом основании, разрезав её на четвёрки и отыскав каждую часть. Она постоянна, а не выводится из ввода наверху, поэтому не меняется вместе с числом, и расхождение между ними не противоречие: панель отвечает про набранное, таблица — про общий вопрос о том, каковы эти шестнадцать групп. Читайте средний столбец сверху вниз, и он считает от 0 до F без пропусков, в чём и смысл: буквы здесь не код, а продолжение цифр после девяти. Читайте первый столбец сверху вниз, и он точно так же считает вверх в двоичной записи, что и делает соответствие механическим. Заканчивается таблица на 1111 потому, что там заканчивается одна 16-ричная цифра: следующее значение требует второй цифры, а это и есть перегруппировка, которую страница выше уже делает.
Формула
10110010 = 1011 0010 = B2
- двоичное число
- Число, которое предстоит переписать, записанное по основанию два. От самого перевода в нём не меняется ничего: то же значение просто записывается другим набором цифр
- полубайт
- Одна группа из четырёх двоичных цифр. Это единица, в которой работает весь перевод, и возможных полубайтов ровно шестнадцать — ровно поэтому с двоичной системой сочетается именно основание шестнадцать
- 0-9, A-F
- Шестнадцать 16-ричных цифр, по одной на полубайт. Десять из них — привычные цифры, а остальные шесть — буквы от A до F, обозначающие десять, одиннадцать и так до пятнадцати
- дополнение нулями
- Нули, дописанные слева к первой группе, когда число цифр не кратно четырём. Они меняют разбиение и никогда не меняют значение, поэтому 10110 и 00010110 — две записи одного и того же числа
- справа налево
- Направление, в котором идёт разрезание. Группы образуются от правого конца, потому что именно там находится разряд единиц, — точно так же, как в десятичном числе отделяют тысячи
- 53 бита
- Какой длины может быть ввод: 53 двоичные цифры, то есть до 9 007 199 254 740 991, а на другом конце это 14 16-ричных цифр. Это та ширина, на которой машина перестаёт различать соседние целые числа, поэтому более длинный ввод отклоняется, а не округляется
Этот перевод люди выполняют чаще всего, не считая его переводом. Прочитать байт в отладчике, проверить значение цвета, посчитать маску подсети, разобрать префикс хеша, прочитать дамп регистров устройства или сравнить два флага в журнале — во всех этих случаях истиной являются биты, а 16-ричная запись — та форма, в которой их печатают, и переход между этими двумя взглядами постоянен в низкоуровневой работе. Направление важно в обе стороны: в документации на микросхему регистр задан 16-ричным значением, и нужный бит находится его развёртыванием, а осциллограмма или вопрос про картину битов приходит в двоичной записи и должен быть записан в той форме, которую использует документация. Школьники встречают это как приём, делающий длинные двоичные числа обозримыми: шестнадцать двоичных цифр нечитаемы, а четыре 16-ричные — читаемы, и знание того, что отношение здесь четыре к одному, а не что-то, что надо вычислять, убирает из задачи арифметику целиком. Страница печатает разбиение, чтобы этот приём был виден, а не заявлен, — именно поэтому её можно использовать и как проверку перевода, сделанного вручную, и как замену ему.
Разобранные примеры
Переписываем 10110010
- Разрежьте строку на группы по четыре, начиная справа: 1011 и 0010
- Прочитайте первую группу: 1011 — это 8 + 2 + 1 = 11, то есть B
- Прочитайте вторую группу: 0010 — это 2, то есть 2
- Две цифры вместе дают B2
Значение по умолчанию, и это байт, поэтому разбиение выходит ровным. B2 — та форма, в которой это значение встретится в отладчике или в описании микросхемы; восемь битов по-прежнему лежат под ней, и потому разбиение печатается рядом с ответом, а не остаётся подразумеваемым.
Один полубайт, 1111
- Четыре цифры — это уже ровно одна группа
- 1111 — это 8 + 4 + 2 + 1 = 15
- Пятнадцать записывается в 16-ричной системе как F
- Ответ — одна цифра, F
Самый большой полубайт и пример, показывающий, почему буквы заканчиваются именно здесь: пятнадцать — наибольшее значение, которое вмещают четыре бита, поэтому F и есть последняя цифра в этом основании. Ничего более широкого одной 16-ричной цифрой не записать, и именно это свойство здесь и используется.
Дополняем короткий ввод, 10110
- Пять цифр на четвёрки не делятся, поэтому начинайте справа: 0110 — это одна полная группа
- Слева остаётся одна цифра, дополните её до четырёх: 0001
- 0001 — это 1, а 0110 — это 6, вместе получаются две цифры 16
- Показанное разбиение — 0001 0110, и оно на две цифры длиннее ввода
Тот случай, который выглядит ошибкой и ею не является. Выходное разбиение длиннее ввода, потому что 16-ричная цифра шириной в четыре бита, а последнюю группу надо до этой ширины заполнить. 10110 и 00010110 — одно и то же число, и именно дополнение делает вторую цифру читаемой: без него оставшейся одиночной цифре нечем было бы быть.
Отрицательное значение, -10110
- Знак минус стоит снаружи числа, поэтому отложите его и переведите 10110
- 10110 перегруппировывается в 0001 0110, что читается как 16
- Верните знак в оба чтения: -16
Знак остаётся снаружи цифр в обоих выводах. Свернуть его внутрь можно было бы только в фиксированную ширину, а её здесь нет: процессор, хранящий это значение в восьми битах, записал бы картину из единиц и нулей, целиком зависящую от того, что ширина равна восьми. По той же причине знак сохраняет и 16-ричное чтение.
Ограничения
Эта страница переписывает только целые двоичные числа. Двоичной точки здесь нет, поэтому дробный ввод отклоняется, а не переводится, и 16-ричная дробь не выдаётся. Длина ввода — не более 53 двоичных цифр, то есть до 9 007 199 254 740 991, а на другом конце это 14 16-ричных цифр; более длинные значения машина не удержит точно, и они отклоняются, а не приближаются. Ведущие нули во вводе принимаются и игнорируются, но нули, добавленные при разбиении, показываются намеренно: дополненный вывод шире своего ввода специально, и это не ошибка. Знак минус перед числом принимается и переносится в оба вывода. Только целые числа, поэтому это чтение, а не арифметика: сложение, вычитание, умножение и деление в любом из оснований — на страницах калькуляторов по ссылкам ниже, а обратный переход, из 16-ричной записи обратно в двоичную, — на отдельной странице.
Частые вопросы
- Почему вывод длиннее того, что я набрал?
- Потому что 16-ричная цифра ровно четыре бита шириной, и левую группу приходится заполнять до этой ширины. Ввод из пяти цифр, например 10110, — это одна полная группа (0110) плюс оставшаяся цифра, и остаток дополняется слева до 0001. Нули не меняют значение — 10110 и 00010110 одно и то же число, — и именно дополнение даёт последней группе то, чем ей быть. Без него оставшейся одиночной цифре не с чем было бы соотноситься в таблице.
- Есть ли в этом переводе арифметика?
- Нет, и это и есть интересное. Поскольку шестнадцать — степень двойки, граница между основаниями приходится ровно на каждые четыре двоичные цифры, поэтому перевод оказывается перегруппировкой, а не вычислением. Ничего не умножается, ничего не складывается и ничего не переносится: цифры разрезаются на четвёрки, и каждая группа находится в таблице. Именно поэтому вместо какой-нибудь другой компактной записи используется 16-ричная, и поэтому же разбиение печатается рядом с ответом: разбиение и есть метод, показанный, а не описанный.
- Почему одна 16-ричная цифра равна четырём битам, а не трём или пяти?
- Потому что четыре бита вмещают ровно шестнадцать различных значений, а у 16-ричной цифры ровно шестнадцать различных символов. Три бита дали бы только восемь значений — поэтому с тройкой сочетается восьмеричная система, — а пять битов дали бы тридцать два, чего не использует ни одно распространённое основание. Совпадение должно быть точным, чтобы перегруппировка работала без переносов, а точным оно бывает только у степеней двойки. По той же причине байт, то есть восемь битов, — это всегда ровно две 16-ричные цифры.
- Какое самое длинное двоичное число здесь можно перевести?
- 53 цифры, то есть до 9 007 199 254 740 991 в десятичной записи, а после перевода — 14 16-ричных цифр. Потолок этот — свойство того, как машина хранит числа точно, а не правило, выбранное этой страницей: за этой шириной соседние целые перестают различаться, поэтому более длинный ввод нельзя перевести достоверно. Он отклоняется с сообщением, а не округляется, и это важно, потому что округлённый ответ выглядел бы здесь как самое обычное 16-ричное значение.
- Можно ли перевести дробное двоичное число?
- На этой странице — нет. Двоичная точка не принимается, и 16-ричная дробь не выдаётся, потому что дробный перевод требует отдельного решения о том, сколько знаков оставлять и как округлять последний. Каждая страница этой группы работает с целыми числами, поэтому один и тот же ввод никогда не принимается в одном месте и не отклоняется в другом. Внутри этой границы перевод точен: любое целое двоичное число в пределах ограничения длины отображается ровно в одно 16-ричное значение, без округления где бы то ни было.
- Имеет ли значение регистр букв в ответе?
- Ответ всегда печатается заглавными — B2, а не b2, — но это одно и то же значение, и понимают обе записи везде. В документации, дизассемблерах и описаниях микросхем почти всегда используют заглавные, а значения цвета в CSS по традиции пишут строчными, поэтому читатель, пришедший с любой стороны, узнает то, что видит. Эта страница печатает заглавные для единообразия с остальными страницами семейства и потому, что такова традиция в тех материалах, рядом с которыми её обычно и используют.
Источники
- Hexadecimal — the base-sixteen system, the digits beyond nine, and the relationship between one hexadecimal digit and four binary digits — Wolfram MathWorld (United States)
- Binary number — the base-two system and positional notation, which is what makes a fixed-width regrouping possible — Wolfram MathWorld (United States)
- Nibble — the four-bit group that one hexadecimal digit corresponds to, and the unit this conversion is carried out in — Wolfram MathWorld (United States)