Калькулятор 16-ричных чисел
Результат
Шестнадцатеричное
- Десятичное
- 10 842
- Двоичное
- 10101001011010
- Остаток
- 0
Калькулятор 16-ричных чисел складывает, вычитает, умножает и делит шестнадцатеричные числа и выдаёт ответ сразу в трёх записях: шестнадцатеричной, десятичной и двоичной. Шестнадцатеричная система счисления — это основание шестнадцать: знаков нужно шестнадцать, а в десятичной их всего десять, поэтому шесть недостающих взяты из алфавита, и A–F обозначают значения от десяти до пятнадцати. Вся запись этим и исчерпывается: A — не код и не сокращение, а знак, идущий после 9. Четыре действия — обычные: сложение, вычитание, умножение и деление идут по столбцам точно так же, как в десятичной арифметике, только основание здесь шестнадцать, а не десять, поэтому перенос в следующий разряд происходит после F, а не после 9. Ответ приводится трижды, потому что три записи нужны разным читателям: шестнадцатеричная — то, как значение обычно и записывают, десятичная — та, которую большинство может прикинуть на глаз, а двоичная — сами биты, из которых шестнадцатеричные знаки и получились. Деление здесь целочисленное, поэтому остаток занимает отдельную строку, а не превращается в десятичную запятую.
Формула
2A3F + 1B = 2A5A (10 815 + 27 = 10 842)
- 2A3F
- Первое число, записанное в шестнадцатеричной системе. Буквы здесь — знаки: A — это десять, B — одиннадцать, и так до F — пятнадцати. Прочитать A как что-то другое — именно та ошибка, ради которой эта страница и существует
- + − × ÷
- Действие. Оно идёт по столбцам точно так же, как в десятичной арифметике, только основание здесь шестнадцать, а не десять, поэтому перенос из столбца происходит, как только сумма переваливает за F
- F + 1 = 10
- Правило переноса в этом основании: пятнадцать плюс один исчерпывает знаки и открывает новый столбец. Это то же событие, что 9 + 1 = 10 в десятичной системе, но на одно основание дальше
- сумма цифр × 16ⁿ
- Как получается десятичная запись: каждый знак умножается на вес своего разряда, а результаты складываются. Именно так 2A3F превращается в 10 815 — 8 192 плюс 2 560 плюс 48 плюс 15
- 4 бита на знак
- Зачем вообще нужно это основание. Один шестнадцатеричный знак вмещает ровно четыре двоичные цифры, поэтому байт — это ровно два таких знака, и для перехода между двумя записями не нужна арифметика, хватает перегруппировки
- остаток
- То, что осталось, когда деление не вышло нацело. Строка есть всегда, и для трёх действий, которые остатка дать не могут, она читается как 0: ноль там означает, что действие ничего не оставило, а не что строку не заполнили
- 53 бита
- Какой ширины ввод принимает страница: до 9 007 199 254 740 991, что здесь записывается как 1FFFFFFFFFFFFF — четырнадцать знаков. За этой шириной машинное число перестаёт различать соседей, и арифметика тихо перестала бы быть точной
Шестнадцатеричная запись — это то, как выглядит двоичное, когда его приходится читать человеку. Всюду, где значение занимает шестнадцать бит и больше, — адрес памяти, цвет, хеш, листинг машинного кода, дамп регистров устройства, перехваченный сетевой пакет, — оно напечатано в этом основании, и арифметика над такими значениями для работающих на этом уровне — ежедневная задача. Прибавить смещение к указателю, посчитать размер структуры, вычислить контрольную сумму, пройти диапазон адресов при отладке или проверить, какие биты выставляет маска, — всё это действия над шестнадцатеричными числами, а двоичная строка рядом с ответом возвращает результат к тем флагам и полям, которые он обозначает. Дизайнеры и фронтенд-разработчики встречают это основание в значениях цвета, где пара знаков на канал — ровно тот байт, которого ждёт экран. Страницу используют и в обратную сторону: значение, известное в десятичном виде, переводят в шестнадцатеричное, чтобы сравнить со спецификацией или вставить в инструмент, а двоичная запись отвечает на вопрос, какие биты в нём на самом деле стоят. Студентам, изучающим системы счисления, это даёт то же самое: буквы кажутся произвольными ровно до тех пор, пока не выписаны веса разрядов.
Разобранные примеры
Сложение 2A3F и 1B
- Записываем числа друг под другом по правому краю: 2A3F и 001B
- Самый правый столбец: F + B, то есть 15 + 11 = 26 = 16 + 10, значит пишем A и переносим 1
- Следующий столбец: 3 + 1 + перенесённая 1 = 5, пишем 5
- Следующий столбец: A + 0 = A, пишем A
- Самый левый столбец: 2 + 0 = 2, пишем 2
- Ответ читается как 2A5A, то есть 10 842 в десятичной записи
Пример по умолчанию, и в нём виден перенос через границу букв: F плюс B даёт двадцать шесть, то есть одну шестнадцать и десять сверху, поэтому вниз идёт A, а не двузначное число. Двоичная запись — те же биты, перегруппированные по четыре, и это удобная проверка для всего вычисления.
Деление 2A3F на 1B
- Здесь 10 815 делится на 27
- 27 укладывается в 10 815 ровно четыреста раз, и 15 остаётся
- Четыреста — это 190 в шестнадцатеричной записи, а остаток пятнадцать — это F
- Страница выдаёт 190 с остатком F
Остаток здесь — F, то есть пятнадцать: значение, которому нужна буква, хотя оно и меньше делителя. Этот пример ещё и оправдывает постоянно присутствующую строку остатка: без неё ответ читался бы как 190, а 400 умножить на 27 — это 10 800, а не 10 815.
Та же сумма в нижнем регистре
- Строчные и прописные буквы — одни и те же знаки: a означает десять ровно так же, как A
- Арифметика не меняется, поэтому ответ тот же — 2A5A
- Страница печатает ответ прописными независимо от того, как набран ввод
Это стоит знать, потому что оба соглашения используются ежедневно — значения цвета в CSS почти всегда строчные, а дизассемблеры и техническая документация печатают прописные, — и ни одно из них не ошибочно. Нормализуется только напечатанный ответ, и нормализуется вверх.
Ограничения
Страница работает только с целыми шестнадцатеричными числами. Шестнадцатеричной запятой и дробного ввода здесь нет, поэтому 2A.8 не принимается; деление, которое не выходит нацело, даёт усечённое частное и остаток, а не дробный ответ. Ввод ограничен значением 1FFFFFFFFFFFFF, то есть 9 007 199 254 740 991 — шириной, за которой машинное число перестаёт различать соседей, — и результаты держатся в тех же границах, поэтому переполнение сообщается, а не выдаётся приблизительно. Отрицательные результаты несут минус впереди, а не записываются в дополнительном коде, и никакая фиксированная ширина не предполагается: 1B здесь — два знака, а не младший байт чего-либо. Строчные буквы принимаются, а ответы печатаются прописными. Деление на ноль отклоняется. Страница выполняет арифметику и перевод в трёх основаниях; побитовых операций она не делает, и никаких AND, OR, XOR или сдвига здесь нет. Три строки панели из четырёх печатаются в машинной записи, знак в знак: шестнадцатеричный ответ, двоичный ответ и остаток. Четвёртая, десятичная, прошла локализацию — разряды в ней разделены неразрывным пробелом, поэтому панель показывает 10 842, а не 10842. Если это число понадобится ввести в поле другой страницы, например на странице перевода из десятичной в шестнадцатеричную, набирайте его без разделителей: 10842.
Частые вопросы
- Что означают буквы?
- Это знаки. Основанию шестнадцать нужно шестнадцать различных знаков, а в привычном наборе их только десять, поэтому A–F обозначают значения от десяти до пятнадцати: A — десять, F — пятнадцать. Выбор именно букв ничего не кодирует: это просто следующие знаки алфавита, и любой набор из шестнадцати различных символов справился бы так же. Прописные и строчные здесь означают ровно один и тот же знак.
- Почему 1 + 1 здесь не даёт переноса, хотя в двоичной системе даёт?
- Потому что основание другое, и столбец исчерпывается в другом месте. В основании два для двойки нет знака, поэтому две единицы переносятся сразу. В основании шестнадцать знаки есть вплоть до пятнадцати, поэтому перенос происходит, только когда сумма переваливает за F. Два плюс два — четыре в любом основании; меняются только знаки для счёта.
- Важен ли регистр ввода?
- Нет. 2a3f и 2A3F — одно и то же число, и принимаются оба, потому что буквы здесь знаки, а знак от регистра не зависит. Ответы в любом случае печатаются прописными. Оба соглашения используются ежедневно — значения цвета в CSS обычно пишут строчными, а дизассемблеры и техническая документация прописными, — поэтому принимать оба ничего не стоит, а отказывать в одном было бы произволом.
- Какое самое большое число можно ввести?
- 1FFFFFFFFFFFFF — это четырнадцать шестнадцатеричных знаков и 9 007 199 254 740 991 в десятичной записи, а в двоичной — пятьдесят три единицы подряд. За этой шириной машина перестаёт различать соседние целые числа, поэтому арифметика тихо перестала бы быть точной: ответ выглядел бы числом, не будучи им. Более широкий ввод отклоняется, а не усекается, и результат, выходящий за тот же потолок, отклоняется тоже.
- Это то же самое, что конвертер систем счисления?
- Это арифметическая половина такого конвертера. Здесь берутся два числа и действие; страницы, которые переводят одно значение между основаниями, — отдельные, и ссылки на них есть на этой. Собрать всё в одну страницу с выпадающими списками основания ввода и основания вывода — другой замысел, и он потерял бы возможность проверять форму ввода: страница, принимающая любое основание, не может сказать, что 2G не является числом в выбранном основании.
- Почему строка остатка есть всегда?
- Потому что панель результатов — это фиксированный набор строк, а не список, который меняет форму вслед за действием, и строка, которая появлялась бы и исчезала, читалась бы хуже, чем та, что стоит на месте. Сложение, вычитание и умножение целых чисел остатка дать не могут, поэтому для них строка читается как 0, и этот ноль — честный ответ, а не заполнитель. При делении он не даёт усечённому частному выглядеть точным ответом.
Источники
- Hexadecimal — the base-sixteen system, the digits beyond nine, and the relationship between one hexadecimal digit and four binary digits — Wolfram MathWorld (United States)
- Number base — why a numeral's value depends on its position and on the base, and how the same quantity is written in different bases — Wolfram MathWorld (United States)
- IEEE 754 — the double-precision format these calculations are carried out in, and the 53-bit significand that fixes this page's input ceiling — IEEE Standards Association (United States)