Инструмент преобразования систем счисления
Мгновенная конвертация между двоичной, восьмеричной, десятичной, шестнадцатеричной и произвольными системами счисления
Исходная система
Что такое конвертация систем счисления?
Конвертация систем счисления — это процесс перевода числа из одной системы счисления в другую. Основные системы: двоичная (основание 2), восьмеричная (основание 8), десятичную (основание 10) и шестнадцатеричная (основание 16).
В информатике двоичная система является наиболее фундаментальной, поскольку все данные в компьютере хранятся в двоичном виде. Шестнадцатеричная система широко используется для адресов памяти и цветовых значений, так как она более компактна и удобна для чтения.
Конвертер систем счисления полезен, когда значения нужно читать или сравнивать в decimal, binary, octal, hexadecimal и других основаниях. Типичные случаи — программирование, bit masks, адреса памяти, цветовые значения, протоколы, обучение и embedded-разработка. Важно учитывать знак, префиксы вроде 0x, ведущие нули, группировку и максимальный размер целого в целевой системе. Математически правильное преобразование может отличаться от того, как язык хранит signed или overflow значения.Как использовать
Как использовать
- Введите число для конвертации в поле ввода (например, 255, FF, 11111111)
- Выберите систему счисления входного числа: двоичную, восьмеричную, десятичную, шестнадцатеричную или произвольную
- Инструмент автоматически переводит введённое число в двоичную, восьмеричную, десятичную и шестнадцатеричную системы
- Нажмите кнопку «Копировать» рядом с нужным результатом, чтобы скопировать его в буфер обмена
Советы по конвертации
- Убедитесь, что введённые цифры допустимы для выбранной системы счисления; например, двоичная принимает только 0 и 1, а шестнадцатеричная — 0-9 и A-F.
- Большие целые числа могут выходить за пределы безопасного диапазона JavaScript, поэтому критичные инженерные значения проверяйте специализированным инструментом произвольной точности.
Применение
Технический принцип
Конвертация систем счисления — это арифметика позиционной записи. Цифра d на позиции p в основании b вносит вклад d × b^p в общее значение, а значение N-значного числа равно Σᵢ₌₀..N₋₁ dᵢ × b^(N-1-i). Десятичная система имеет основание 10, двоичная — основание 2, восьмеричная — основание 8, шестнадцатеричная — основание 16. Всю работу выполняют два алгоритма: для перевода из основания b₁ в десятичную систему вычисляется полином (метод Горнера — стандартная ин-плейс форма: `value = value * b₁ + digit`); для перевода из десятичной системы в основание b₂ выполняется последовательное деление на b₂ сбором остатков, затем они записываются в обратном порядке. Оба алгоритма работают за O(N) на цифру и O(1) по дополнительной памяти и подходят для любого основания от 2 до 36 (цифры '0'-'9' + 'A'-'Z' как 10-35). Большинство практических задач конвертации пропускают промежуточный десятичный шаг и переходят напрямую между основаниями, являющимися степенями двойки. Двоичная ↔ восьмеричная группирует 3 двоичных цифры на одну восьмеричную (поскольку 2³ = 8), а двоичная ↔ шестнадцатеричная группирует 4 двоичных цифры на одну шестнадцатеричную (2⁴ = 16). Поэтому 0xFF = 11111111₂, а 0755 (восьмеричная, Unix-права файла) = 111101101₂ = 493 десятичных. Страница также обрабатывает основание 32 (RFC 4648 §6, используется в некоторых токенах аутентификации) и основание 36 (традиционный компактный алфавит для сокращения URL '0'-'9' + 'A'-'Z'), где перевод через двоичную систему — единственный разумный способ, поскольку 36 не является степенью двойки. Данная страница использует встроенную функцию JavaScript parseInt(value, base) для парсинга и (123).toString(base) для вывода. Обе ограничены точностью Number: IEEE 754 binary64 имеет 53-битную мантиссу, поэтому целые значения больше 2⁵³ - 1 = 9 007 199 254 740 991 теряют точность. Например, Number.MAX_SAFE_INTEGER + 1 равно Number.MAX_SAFE_INTEGER + 2 — два больших значения не представимы. Для конвертации целых чисел произвольной точности BigInt — современное решение: логика parseInt на BigInt несложна, а BigInt.prototype.toString(base) обрабатывает любое основание от 2 до 36. Криптографические библиотеки, генераторы UUID и математика больших чисел (BIP-32 HD-кошельки, ключи RSA) используют BigInt по этой причине. Тот же алгоритм обрабатывает знаковые числа и числа с плавающей точкой, с некоторыми оговорками. В дополнительном коде (доминирующее знаковое представление для целых чисел фиксированной ширины, начиная с IBM System/360 1965 года и во всех современных процессорах) -1 — это все единицы (0xFFFFFFFF для 32 бит, 0xFFFFFFFFFFFFFFFF для 64), а старший бит — знаковый. Для перевода отрицательного целого числа в дополнительном коде в десятичную систему нужно вычесть 2^n (где n — битовая ширина). Для чисел с плавающей точкой IEEE 754 binary64 хранит знак (1 бит), экспоненту (11 бит, со смещением 1023) и мантиссу (52 бита с неявным ведущим 1). Десятичное преобразование произвольного binary64 поэтому не является точным — 0,1 в IEEE 754 равно 0,1000000000000000055511151231257827021181583404541015625, поэтому финансовый код использует целые центы или десятичные библиотеки вместо float.
- Позиционная запись: цифра d на позиции p в основании b вносит вклад d × b^p. Полное значение N-значного числа равно Σᵢ dᵢ × b^(N-1-i). Метод Горнера вычисляет это за O(N) времени и O(1) памяти: `value = value * b + digit`.
- Для перевода из десятичной системы в основание b выполняется последовательное деление на b сбором остатков; чтение их в обратном порядке даёт целевое представление. Алгоритм работает за O(N) для N-значного результата.
- Прямая конвертация двоичная ↔ шестнадцатеричная: каждая hex-цифра — это ровно 4 двоичных цифры, поэтому 0xFF = 11111111₂. Двоичная ↔ восьмеричная: каждая восьмеричная цифра — 3 двоичных, поэтому 0755 = 111101101₂.
- Дополнительный код (используется всеми современными процессорами для знаковых целых чисел): старший бит — знаковый, а отрицательные числа кодируются как 2^n - |x|. -1 в 32-битном дополнительном коде — это 0xFFFFFFFF.
- IEEE 754 binary64 (Number в JavaScript): 1 знаковый бит + 11-битная экспонента со смещением (смещение 1023) + 52-битная мантисса с неявным ведущим 1. Максимальное безопасное целое — 2⁵³ - 1 = 9 007 199 254 740 991; значения выше теряют точность.
- parseInt(value, base) и Number.prototype.toString(base) работают для оснований 2-36 и используют 53-битную мантиссу Number. Для произвольной точности используйте BigInt('value', base) и BigInt.prototype.toString(base).
- Основание 32 (RFC 4648 §6) и основание 36 ('0'-'9' + 'A'-'Z') требуют двоичную систему как промежуточный шаг, поскольку 32 и 36 не являются степенями двойки — цифра не соответствует фиксированному числу битов.
- Граничный случай: целочисленное деление с остатком для отрицательных оснований или отрицательных чисел в дополнительном коде требует обработки знака; страница обрабатывает ввод как беззнаковое абсолютное значение и повторно применяет знак к конечному результату.
Примеры
Десятичная в шестнадцатеричную
Вход: 255 (десятичная)
Выход: FF (шестнадцатеричная)
Примечание: часто используется в значениях цвета CSS, например #FF0000 для красногоДвоичная в десятичную
Вход: 11111111 (двоичная)
Выход: 255 (десятичная)
Примечание: максимальное значение 8-битного двоичного числа, т. е. наибольший беззнаковый байтШестнадцатеричная в двоичную
Вход: 1A3F (шестнадцатеричная)
Выход: 1101000111111 (двоичная)
Примечание: каждые 4 двоичных разряда соответствуют 1 шестнадцатеричному разрядуВосьмеричная в шестнадцатеричную
Вход: 377 (восьмеричная)
Выход: FF (шестнадцатеричная)
Примечание: права доступа Unix 377 (rwxrwxrwx) равны hex FFПроизвольное основание (Base-36)
Вход: ZZ (base-36)
Выход: 1295 (десятичная)
Примечание: base-36 использует 0-9 и A-Z; ZZ — наибольшее 2-значное значение в этой системеЧасто задаваемые вопросы
Какие системы счисления поддерживаются?
Двоичная (основание 2), восьмеричная (8), десятичная (10), шестнадцатеричная (16), а также произвольные системы счисления с основанием от 2 до 36. Основания выше 36 потребовали бы расширенного алфавита и здесь не рассматриваются.
Как используются буквы в системах счисления выше 10?
В системах с основанием больше 10 используются буквы: A=10, B=11, … F=15 в шестнадцатеричной; от A=10 до Z=35 в системе по основанию 36. На вход принимаются и заглавные, и строчные буквы; на выходе по умолчанию заглавные.
Как преобразовать отрицательное или дробное число?
Отрицательные целые работают напрямую — страница хранит их внутри как JavaScript BigInt или знаковые целые. Дробные значения (например, 0.5 в десятичной → 0.1 в двоичной) поддерживаются, но ограничены примерно 15 значащими цифрами из-за точности с плавающей точкой.
Чем отличается дополнительный код от знака и величины?
Дополнительный код (two's complement) — то, как компьютеры представляют отрицательные целые: старший бит означает знак, остальное кодирует значение со смещением. Знак и величина (signed magnitude) просто переключает знаковый бит. Страница обычно показывает знак и величину (как обычная десятичная запись со знаком), а не битовый шаблон. Если нужен дополнительный код, используйте «программистский» калькулятор.
Почему мой шестнадцатеричный результат дополнен иначе, чем в другом инструменте?
Hex-значения могут дополняться слева до байта или машинного слова, а могут и нет. 0xff и 0x000000FF — это одно и то же число, просто отображённое с разным дополнением. Страница не дополняет автоматически; добавляйте ведущие нули вручную, если этого требует контекст (фиксированная ширина MAC-адреса, сегмента IPv6 и так далее).
Есть ли ограничения на размер числа?
JavaScript BigInt справляется с целыми произвольной длины, поэтому преобразования между системами счисления для целых работают для чисел любой практической длины. Для дробей предел задаётся 15–17 значащими цифрами типа Number.
Можно ли здесь конвертировать IP-адреса или цветовые коды?
Только косвенно: переводите по байту. Для IP в формате dotted-quad преобразуйте каждый октет из десятичной в шестнадцатеричную; для цветовых кодов #RRGGBB разбивайте на три пары по байту. Парсинг проще делать в специализированных инструментах для IP и цветов.