Перейти к основному содержанию
CalcMax

Калькулятор 16-ричных чисел

Результат

2A5A

Шестнадцатеричное

Десятичное
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 — четырнадцать знаков. За этой шириной машинное число перестаёт различать соседей, и арифметика тихо перестала бы быть точной

Шестнадцатеричная запись — это то, как выглядит двоичное, когда его приходится читать человеку. Всюду, где значение занимает шестнадцать бит и больше, — адрес памяти, цвет, хеш, листинг машинного кода, дамп регистров устройства, перехваченный сетевой пакет, — оно напечатано в этом основании, и арифметика над такими значениями для работающих на этом уровне — ежедневная задача. Прибавить смещение к указателю, посчитать размер структуры, вычислить контрольную сумму, пройти диапазон адресов при отладке или проверить, какие биты выставляет маска, — всё это действия над шестнадцатеричными числами, а двоичная строка рядом с ответом возвращает результат к тем флагам и полям, которые он обозначает. Дизайнеры и фронтенд-разработчики встречают это основание в значениях цвета, где пара знаков на канал — ровно тот байт, которого ждёт экран. Страницу используют и в обратную сторону: значение, известное в десятичном виде, переводят в шестнадцатеричное, чтобы сравнить со спецификацией или вставить в инструмент, а двоичная запись отвечает на вопрос, какие биты в нём на самом деле стоят. Студентам, изучающим системы счисления, это даёт то же самое: буквы кажутся произвольными ровно до тех пор, пока не выписаны веса разрядов.

Разобранные примеры

  1. Сложение 2A3F и 1B

    1. Записываем числа друг под другом по правому краю: 2A3F и 001B
    2. Самый правый столбец: F + B, то есть 15 + 11 = 26 = 16 + 10, значит пишем A и переносим 1
    3. Следующий столбец: 3 + 1 + перенесённая 1 = 5, пишем 5
    4. Следующий столбец: A + 0 = A, пишем A
    5. Самый левый столбец: 2 + 0 = 2, пишем 2
    6. Ответ читается как 2A5A, то есть 10 842 в десятичной записи

    Пример по умолчанию, и в нём виден перенос через границу букв: F плюс B даёт двадцать шесть, то есть одну шестнадцать и десять сверху, поэтому вниз идёт A, а не двузначное число. Двоичная запись — те же биты, перегруппированные по четыре, и это удобная проверка для всего вычисления.

  2. Деление 2A3F на 1B

    1. Здесь 10 815 делится на 27
    2. 27 укладывается в 10 815 ровно четыреста раз, и 15 остаётся
    3. Четыреста — это 190 в шестнадцатеричной записи, а остаток пятнадцать — это F
    4. Страница выдаёт 190 с остатком F

    Остаток здесь — F, то есть пятнадцать: значение, которому нужна буква, хотя оно и меньше делителя. Этот пример ещё и оправдывает постоянно присутствующую строку остатка: без неё ответ читался бы как 190, а 400 умножить на 27 — это 10 800, а не 10 815.

  3. Та же сумма в нижнем регистре

    1. Строчные и прописные буквы — одни и те же знаки: a означает десять ровно так же, как A
    2. Арифметика не меняется, поэтому ответ тот же — 2A5A
    3. Страница печатает ответ прописными независимо от того, как набран ввод

    Это стоит знать, потому что оба соглашения используются ежедневно — значения цвета в 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, и этот ноль — честный ответ, а не заполнитель. При делении он не даёт усечённому частному выглядеть точным ответом.

Источники

Похожие калькуляторы