Конвертер из десятичной в 16-ричную
Результат
Шестнадцатеричное
- Разрядные значения
- 2×4096 + 10×256 + 3×16 + 15
Конвертер из десятичной в шестнадцатеричную переписывает целое десятичное число в шестнадцатеричную запись повторным делением. Шестнадцатеричная система счисления — это просто основание шестнадцать, и весь метод сводится к делению с остатком: делим число на шестнадцать, запоминаем остаток, делим на шестнадцать частное и продолжаем, пока частное не обратится в ноль. Меняется только алфавит. При делении на два в остатке бывает лишь 0 или 1, а при делении на шестнадцать — любое значение от 0 до 15, и значения от десяти до пятнадцати записываются буквами от A до F: A — это 10, B — одиннадцать, и так до F — пятнадцати. Поэтому остаток выходит не шестнадцатеричной цифрой, а числом, и каждый остаток больше 9 приходится заменять буквой, прежде чем ответ готов. Возьмём 10 815: 10 815 ÷ 16 даёт 675 и остаток 15, затем 675 ÷ 16 даёт 42 и остаток 3, затем 42 ÷ 16 даёт 2 и остаток 10, и наконец 2 ÷ 16 даёт 0 и остаток 2. Если прочитать остатки снизу вверх, получатся 2, 10, 3, 15 — то есть 2, A, 3, F, значит 10 815 в шестнадцатеричной записи равно 2A3F. Буквы и есть то, ради чего эта страница существует. Сумма по разрядам рядом с ответом показывает то же число с другого конца: в основании шестнадцать разряды стоят 4 096, 256, 16 и 1, а 2A3F — это 2×4 096 плюс 10×256 плюс 3×16 плюс 15, что снова даёт 10 815. Основание шестнадцать выбрано потому, что одна шестнадцатеричная цифра — это ровно четыре двоичные: байт всегда два знака, а тридцатидвухбитное значение — всегда восемь, и именно поэтому так записывают коды цвета, адреса памяти и хеши.
Деление 10 815 на шестнадцать круг за кругом, пока частное не обратится в ноль
| Круг | Деление | Частное | Остаток |
|---|---|---|---|
| 1 | 10815 ÷ 16 | 675 | 15 (F) |
| 2 | 675 ÷ 16 | 42 | 3 |
| 3 | 42 ÷ 16 | 2 | 10 (A) |
| 4 | 2 ÷ 16 | 0 | 2 |
Два остатка из четырёх записаны здесь числом, а рядом в скобках стоит буква — 15 (F) и 10 (A), и ради этой двойной записи таблица и существует. Арифметика даёт 15, а ответу нужна F. Кто поделит правильно, а потом перепишет столбец остатков как есть, получит 2103 вместо 2A3F — единственная ошибка, к которой этот перевод и подталкивает. Прочитайте столбец снизу вверх, и знаки ответа появятся по порядку: 2, 10, 3, 15, то есть 2A3F, как только два значения больше девяти заменены буквами. Таблица закреплена на 10 815, тогда как панель выше переводит то, что вы ввели: она показывает метод, а не результат. Каждый круг уменьшает частное примерно в шестнадцать раз, поэтому даже для самого большого допустимого ввода лестница занимает всего четырнадцать строк — ровно столько, сколько знаков в шестнадцатеричном потолке 1FFFFFFFFFFFFF.
Формула
10 815 ÷ 16 = 675, остаток 15 → 675 ÷ 16 = 42, остаток 3 → 42 ÷ 16 = 2, остаток 10 → 2 ÷ 16 = 0, остаток 2 ⇒ 10 815 = 2A3F = 2×4 096 + 10×256 + 3×16 + 15
- 10 815
- Целое число для перевода, записанное в десятичной системе. Десятичная запятая и разделитель тысяч отклоняются, а не округляются, поэтому пишите 10815, а не 10 815
- ÷ 16
- Шаг, который повторяется; на странице про двоичную систему на этом месте стоит двойка. Шестнадцать — это основание, в которое идёт перевод, поэтому каждый круг спрашивает, сколько раз шестнадцать укладывается в текущее число и что при этом осталось
- частное
- Часть, которая переходит в следующий круг. Процесс останавливается, когда частное обращается в ноль: это значит, что разряд выше в ответе больше не нужен
- остаток
- Знак, который даёт этот круг, и здесь он может быть любым от 0 до 15, а не только 0 или 1. Именно эту разницу чаще всего и теряют: остаток 15 — не цифра 15, потому что одиночного знака для пятнадцати в этом основании нет
- A — F
- Буквы, которые обозначают значения от десяти до пятнадцати: A — 10, B — 11, C — 12, D — 13, E — 14, F — 15. Это не отдельная система обозначений, которую надо учить: каждая буква — просто число, которому не нашлось одиночного десятичного знака
- ⇒ 2A3F
- Знаки, собранные снизу вверх, с уже подставленными буквами вместо всех остатков больше 9. Первый найденный остаток становится самым правым знаком, поэтому круги, прочитанные в порядке записи, дают ответ задом наперёд
- 2×4 096 + 10×256 + 3×16 + 15
- Тот же ответ, прочитанный как сумма по разрядам. В отличие от двоичной записи коэффициенты здесь не все единицы — и именно эта сумма ловит букву, превращённую не в то число: неверная A изменит результат
Шестнадцатеричная запись — это стенография, которой пользуются инженеры, поэтому перевод между двумя системами нужен всюду, где значение переходит из одной в другую. Коды цвета — повседневный случай: канал от 0 до 255 занимает два шестнадцатеричных знака, поэтому цвет и записывают шестью, и 10 815 у дизайнера и 2A3F у разработчика — один и тот же цвет. Адреса памяти, контрольные суммы, хеши и значения регистров в технической документации напечатаны в этом основании по той же причине: четыре бита на знак, поэтому ширина значения видна с первого взгляда. Кто читает стек вызовов или дамп сетевого пакета, делает этот перевод в обратную сторону десятки раз в час, а кто пишет маску или магическое число — в эту. В учёбе это спрашивают напрямую, обычно как перевод из десятичной в шестнадцатеричную с показом хода решения, и таблица ниже — ровно он: одна строка на одно деление, с уже подставленными буквами. Заодно это тот шаг, после которого становится видна ширина значения: два знака — байт, восемь — тридцатидвухбитное слово, так что перевод отвечает и на вопрос, сколько знаков значение займёт в том формате, куда его записывают.
Разобранные примеры
Запись 10 815 в шестнадцатеричной системе
- 10 815 ÷ 16 = 675, остаток 15 — записываем 15, то есть F
- 675 ÷ 16 = 42, остаток 3
- 42 ÷ 16 = 2, остаток 10 — то есть A
- 2 ÷ 16 = 0, остаток 2 — частное обратилось в ноль, останавливаемся
- Читаем остатки снизу вверх: 2, 10, 3, 15
- Заменяем 10 на A и 15 на F: ответ 2A3F
Пример по умолчанию, и в нём видны обе подстановки. Обратите внимание: из четырёх остатков два требуют буквы, и это типично, а не невезение — остаток больше 9 выпадает примерно шесть раз из шестнадцати, и в ответе длиной три-четыре знака почти всегда найдётся хотя бы один такой.
Целый байт — 255
- 255 ÷ 16 = 15, остаток 15 — записываем F
- 15 ÷ 16 = 0, остаток 15 — записываем F
- Частное обратилось в ноль, читаем два остатка снизу вверх: FF
Два знака для самого большого значения, которое вмещает один байт, — ровно поэтому шестнадцатеричная запись и существует. Пару FF и 255 стоит запомнить: это потолок цветового канала, беззнакового байта в большинстве языков и одного знака сырых данных.
Степень шестнадцати — 1 048 576
- 1 048 576 ÷ 16 = 65 536, остаток 0
- 65 536 ÷ 16 = 4 096, остаток 0
- 4 096 ÷ 16 = 256, остаток 0
- 256 ÷ 16 = 16, остаток 0
- 16 ÷ 16 = 1, остаток 0
- 1 ÷ 16 = 0, остаток 1 — читаем снизу вверх и получаем 100000
Шестнадцатеричное эхо примера со степенью двойки на странице про двоичную систему: степень основания выходит как единица с нулями. 1 048 576 — это 16⁵ и одновременно 2²⁰, и в этом весь смысл записи: одно и то же значение в двоичной системе выглядит как 100000000000000000000, а в шестнадцатеричной — как 100000, и второе читается.
Отрицательное число
- Минус переносится, а не переводится: знаки считаются для 10 815, как в первом примере
- 10 815 ÷ 16 = 675, остаток 15, и так вниз до 0 и остатка 2
- Прочитанные снизу вверх знаки: 2, A, 3, F
- Знак ставится впереди: -2A3F
Ведущий минус принимается и печатается впереди, а сумма по разрядам заключается в скобки, чтобы минус относился ко всей сумме, а не к её первому слагаемому. Заметим, чем это не является: перед нами знаковое прочтение величины, а не битовый шаблон дополнительного кода, который хранила бы машина. Если нужно именно содержимое регистра для отрицательного значения, а не его знаковая запись, это другой вопрос и другая страница.
Ограничения
Страница переводит только целые числа, поэтому десятичная запятая отклоняется, а не округляется: 10 815,5 здесь перевести нельзя. Разделители тысяч тоже отклоняются: пишите 10815, а не 10 815, потому что запятая в одних языках отделяет разряды, а в других служит десятичным знаком, и угадывать между двумя прочтениями хуже, чем спросить прямо. Ввод ограничен значением 9 007 199 254 740 991, то есть четырнадцатью шестнадцатеричными знаками, а его шестнадцатеричная форма — 1FFFFFFFFFFFFF: тот же потолок, который на страницах про двоичную систему стоит как пятьдесят три цифры, потому что это один предел, записанный в двух основаниях. Ведущие нули и ведущий минус принимаются; минус даёт знаковое прочтение величины, а не битовый шаблон дополнительного кода. Таблица ниже печатает лестницу для 10 815 и не следует за числом, которое вы ввели. Обратный перевод, из шестнадцатеричной в десятичную, — отдельная страница, и арифметики над результатом здесь нет. Панель печатает машинную запись: и шестнадцатеричный ответ, и сумма по разрядам — это строки знак в знак, и разделителей разрядов в них нет, поэтому сумма выглядит как 2×4096 + 10×256 + 3×16 + 15. Если такое число понадобится ввести в поле другой страницы, набирайте его без разделителей.
Частые вопросы
- Как перевести десятичное число в шестнадцатеричное вручную?
- Делите на шестнадцать, записывайте остаток, затем делите частное на шестнадцать и повторяйте, пока частное не станет нулём. Остатки читайте снизу вверх и заменяйте каждый остаток больше 9 его буквой: 10 — это A, 11 — B, 12 — C, 13 — D, 14 — E, 15 — F. Для 10 815 остатки сверху вниз выходят 15, 3, 10, 2, а прочитанные вверх и с подстановкой они дают 2A3F.
- Зачем в шестнадцатеричной системе вообще нужны буквы?
- Потому что основанию шестнадцать нужно шестнадцать одиночных знаков, а десятичные цифры дают только десять. Шесть лишних символов надо откуда-то взять, и буквы — то соглашение, на котором сошлись все системы. A — это десять, F — пятнадцать, поэтому знаки этой системы идут от 0 до 9, а затем от A до F. И это не что-то дополнительное, что надо заучивать поверх перевода: буква — всегда только имя остатка, которому не хватило одиночного десятичного знака.
- Какое самое большое десятичное число здесь можно перевести?
- 9 007 199 254 740 991, то есть 1FFFFFFFFFFFFF в шестнадцатеричной записи — четырнадцать знаков. Ограничение берётся оттуда же, откуда ограничение в пятьдесят три цифры на страницах про двоичную систему: это одно и то же число, записанное в двух основаниях. Всё, что больше, отклоняется с сообщением, а не переводится, потому что за этой шириной машина уже не удерживает соседние целые числа порознь, и переведённому ответу нельзя было бы доверять.
- Шестнадцатеричная система — это то же самое, что двоичная, только короче?
- Это то же значение, записанное в основании, которое является степенью двойки, и поэтому переходить между ними так легко. Каждый шестнадцатеричный знак — ровно четыре двоичные цифры, поэтому 2A3F — это 0010 1010 0011 1111 без остатка. Это не совпадение конкретного примера: так для любого шестнадцатеричного числа, и в этом причина, по которой эту систему используют. При переходе ничего не теряется и ничего не приходится округлять.
- Можно ли перевести десятичное число с дробной частью?
- Здесь — нет. Страница принимает целые числа, поэтому 10 815,5 отклоняется, а не округляется. Дроби в основании шестнадцать определены строго — разряды справа от запятой стоят одну шестнадцатую, одну двести пятьдесят шестую и так далее, — но принять их значило бы решить, сколько знаков оставить и как округлить последний, а все страницы этой группы переводят целые числа.
- Почему страница печатает ещё и сумму по разрядам, а не только шестнадцатеричное число?
- Потому что это проверка, которая ловит ошибку подстановки. Если вы превратили остаток 15 не в ту букву или поставили A там, где нужна была F, напечатанная сумма не сойдётся с исходным числом: 2×4 096 + 10×256 + 3×16 + 15 даёт 10 815 только тогда, когда буквы прочитаны верно. В отличие от двоичного варианта этой суммы коэффициенты здесь не все единицы, поэтому каждый знак ответа учитывается отдельно.
Источники
- Hexadecimal — base sixteen, the letters A to F as the values ten to fifteen, and conversion to and from decimal — Wolfram MathWorld (United States)
- Number base — why a numeral's value depends on its position and on the base, and how one quantity is written in several bases — Wolfram MathWorld (United States)
- Powers of two — the sequence that the base-sixteen positions double up into, catalogued as OEIS A000079 — OEIS Foundation Inc. (United States)