Конвертер систем счисления
КонвертацияПеревод целых чисел между системами счисления 2–62 через BigInt, без потери точности для больших чисел.
- Десятичная
На этой странице
Что такое конвертер систем счисления?#
Любое целое число — это одно и то же число; меняется лишь его написание. 255 в десятичной, ff в шестнадцатеричной, 11111111 в двоичной и 377 в восьмеричной — четыре строки для одной и той же величины. Конвертер систем счисления переводит одно написание в другое — и причина, почему для этого нужен полноценный инструмент, а не parseInt, в том, что JavaScript Number после 2^53 (около 16 десятичных цифр) без предупреждения теряет точность, поэтому преобразование 64-битного идентификатора вроде 18446744073709551616 через обычный Number вернёт вам другое число без единого предупреждения.
Эта страница полностью на BigInt, поэтому целое число произвольного размера сохраняет полную точность при любом преобразовании. Поддерживаются основания 2–62 с каноническим алфавитом цифр: 0-9, затем a-z, затем A-Z. Для удобства основания 2–36 нечувствительны к регистру (можно набрать FF для hex 255), а основания 37–62 чувствительны к регистру — потому что в системе по основанию 62 строчная a и заглавная A — это две разные цифры (10 и 36).
Как пользоваться#
- Введите Значение, которое нужно преобразовать. При загрузке там
255. - Укажите Из системы — основание, в котором записано ваше значение (в выпадающем списке 2–62; по умолчанию 10, десятичная).
- Укажите В систему — нужное основание (по умолчанию 16, шестнадцатеричная). Стрелка между ними — лишь визуальная подсказка.
- Поле Вывод показывает преобразованное написание вживую, а расположенная ниже строка Десятичная — то же значение в системе по основанию 10, что удобно для самопроверки при конверсии между двумя непривычными системами.
- Пример перезагружает значение по умолчанию, Очистить опустошает поле. Недопустимая для выбранного основания цифра отражается в строке состояния (набор
8в восьмеричной системе илиgв шестнадцатеричной не даст молчаливого мусора).
Ключевые возможности#
- Точность BigInt. Преобразование идёт на целых числах произвольной точности, поэтому
2^64и больше гоняются туда-обратно без потерь. Здесь нет обрыва на 2^53 и нет приближений с плавающей точкой. - Основания 2–62. Покрывает двоичную, восьмеричную, десятичную, шестнадцатеричную, base32, base36, наборы в стиле base58 и полную base62 — диапазон, который реально используется в системах.
- Разбор с учётом регистра. Основания 2–36 для удобства принимают любой регистр; в основаниях 37–62 регистр существенен, поэтому
aиAостаются разными цифрами, как и требует канонический 62-символьный алфавит. - Допускаются символы подчёркивания. Можно вставить
1_000, и это прочитается как1000— то же соглашение о читаемости, что и во многих языках программирования. - Учитывается знак. Отрицательные значения преобразуются корректно; минус сохраняется при любом основании.
Разбор примера#
Со значением по умолчанию 255, Из системы 10, В систему 16 панель покажет:
Вывод: ff
Десятичная: 255
Переключите В систему на 2 и получите 11111111 — восемь бит, значение, которое точно помещается в один байт; именно поэтому ff так часто встречается в цветовых кодах и дампах памяти.
Настоящая причина использовать BigInt проступает на 64-битном значении. Введите 18446744073709551616 (это 2^64), Из системы 10, В систему 16:
Вывод: 10000000000000000
Десятичная: 18446744073709551616
Это 1 и шестнадцать нулей — ровно 2^64 в hex. Конвертер на JavaScript Number округлил бы ввод до 18446744073709552000 ещё до начала работы, и вы бы этого не заметили. Прогоните обратное преобразование — Из системы 16 / В систему 10 — и исходное десятичное значение вернётся неизменным; это и есть тест, доказывающий, что точность не потеряна.
FAQ#
Почему FF работает в hex, но не в системе по основанию 62?#
Основания 2–36 делят один буквенный диапазон (a–z, он отображается в 10–35), поэтому регистр не важен и FF = ff = 255. Начиная с основания 37 алфавиту не хватает 26 букв, и он распространяется на заглавные: a=10, b=11 … z=35, A=36, B=37 … Z=61. Как только задействованы оба регистра, a и A — разные цифры, поэтому разборщик обязан сохранять регистр.
Что будет, если ввести цифру, недопустимую для основания?#
Вы получите понятную ошибку, а не неверный ответ. Набор 8 или 9 при Из системы 8 (восьмеричная) либо g при Из системы 16 (шестнадцатеричная) отвергается, потому что эти символы не являются допустимыми цифрами в таком основании. Строка состояния укажет недопустимый символ.
Зачем нужна строка Десятичная, если я преобразую в другое основание?#
Потому что десятичная — это система, в которой человек мыслит, и естественная основа для самопроверки. Если вы переводите q из base-58 в base-16 и видите 1a, строка Десятичная (26) позволит убедиться: «да, ~58-й символ действительно означал двадцать шесть» — без арифметики вручную.
Поддерживаются ли дробные числа вроде 3.14?#
Нет — этот конвертер работает только с целыми числами. Преобразование дробной части в другую систему счисления — отдельная задача (в большинстве оснований оно даёт бесконечные периодические разложения, как 1/3 в десятичной), и молчаливо обрезать его было бы вводящим в заблуждение. Для целых значений любого размера преобразование точное и мгновенное.