Двоичная, восьмеричная, десятичная и hex — и любая система до 36
Введите число в двоичной, восьмеричной, десятичной, шестнадцатеричной или любой системе от 2 до 36 и сразу увидите его во всех остальных. Числа могут быть сколь угодно большими — конвертер использует целые числа произвольной точности, поэтому 64- или 128-битное значение сохраняет каждую цифру, — а отрицательные числа показаны в дополнительном коде на 8, 16, 32, 64 и 128 бит, с видом битов, где можно щёлкнуть по биту, чтобы инвертировать его. Префиксы вроде <code>0x</code> и разделители вроде <code>1_000_000</code> распознаются. Всё работает в вашем браузере.
Как перевести число в другую систему счисления
- 1Выберите систему, в которой вводите: Bin, Oct, Dec, Hex или Другая для любой системы от 2 до 36.
- 2Введите или вставьте число. Знак минус, префиксы
0x,0bи0o, а также пробелы, подчёркивания или запятые между цифрами допускаются. - 3Смотрите результат сразу во всех системах, с цифрами, сгруппированными для удобства чтения. Выберите любую другую систему в последней строке или включите Все системы 2–36.
- 4Проверьте таблицу дополнительного кода со знаковым и беззнаковым значением для каждой разрядности, щёлкайте по битам в виде битов, чтобы инвертировать их, и копируйте нужную форму.
Как устроены позиционные системы счисления
В любой системе каждая цифра весит основание в степени её позиции, считая с нуля справа. В десятичной 255 — это 2×10² + 5×10¹ + 5×10⁰. В двоичной то же число — 11111111: восемь единиц, дающих 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1. В шестнадцатеричной — FF: 15×16 + 15.
Системам с основанием больше 10 нужно больше десяти символов, поэтому счёт продолжают буквы: A — это 10, B — 11 и так далее до Z для 35. Поэтому 36 — наибольшее основание, использующее обычные цифры и буквы. Регистр букв не учитывается.
Зачем программистам двоичная, восьмеричная и hex
- Двоичная (основание 2)
- Так машина хранит всё. Удобна для битовых флагов, масок и подсетей, но длинная: у 32-битного значения 32 цифры.
- Шестнадцатеричная (основание 16)
- Каждая hex-цифра — ровно четыре бита, поэтому байт — это две hex-цифры, а 32-битное значение — восемь. Используется для адресов памяти, цветов (#FF8800), хешей, UUID и дампов байтов.
- Восьмеричная (основание 8)
- Каждая восьмеричная цифра — три бита. Сохранилась в основном в правах доступа к файлам Unix, где 755 — это три группы битов rwx; см. <a href="/chmod-calculator">калькулятор chmod</a>.
- Основание 36 и основание 62
- Компактные идентификаторы без учёта регистра, например короткие URL и ID, используют основание 36 (0–9 и a–z). Основание 62 добавляет заглавные буквы и выходит за рамки этого инструмента.
Дополнительный код и отрицательные числа
Компьютеры хранят знаковые целые в дополнительном коде: при фиксированной ширине n бит отрицательное число −x хранится как 2ⁿ − x. На 8 битах −1 — это 11111111 (0xFF), −128 — 10000000 (0x80), а старший бит одновременно служит знаком. 8-битное знаковое целое вмещает от −128 до 127; те же 8 бит без знака — от 0 до 255.
Таблица дополнительного кода показывает оба прочтения для каждой распространённой разрядности. Введите 0xFFFFFFFF — и увидите, что это 4 294 967 295 как беззнаковое 32-битное целое и −1 как знаковое; введите -42 — и получите его битовый шаблон для каждой разрядности. Если значение не помещается в разрядность, строка сообщает об этом, а не обрезает его молча.
Большие числа и точность
Обычные числа JavaScript теряют точность выше 2⁵³ (9 007 199 254 740 992), поэтому многие онлайн-конвертеры ошибаются с 64-битными ID и хешами. Этот конвертер везде использует BigInt, поэтому точен для чисел любого размера — 128-битного значения, хеша SHA-256, прочитанного как целое, или числа из 20 000 цифр.
Переводятся только целые числа. Дроби в других системах редко бывают конечными (0,1 в десятичной — бесконечная периодическая дробь в двоичной), поэтому для битовых шаблонов чисел с плавающей точкой и меток времени используйте конвертер Unix timestamp.
Часто задаваемые вопросы
- Как перевести двоичное число в десятичное?
- Выберите Bin, введите двоичное число и смотрите десятичную строку. Вручную сложите степени двойки для каждой 1: 1011 — это 8 + 0 + 2 + 1 = 11.
- Как перевести десятичное число в шестнадцатеричное?
- Выберите Dec, введите число и смотрите шестнадцатеричную строку. Вручную делите на 16 и записывайте остатки от последнего к первому: 255 ÷ 16 = 15, остаток 15, значит 255 — это FF.
- Что означает префикс 0x?
- 0x обозначает шестнадцатеричное число в C, JavaScript, Python и большинстве других языков, так же как 0b — двоичное, а 0o — восьмеричное. Конвертер принимает эти префиксы на входе и может добавлять их к результату.
- Как переводятся отрицательные числа?
- В каждой системе результат сохраняет знак минус, например -2A в hex. Таблица дополнительного кода и вид битов показывают, как то же число хранится в знаковом 8-, 16-, 32-, 64- или 128-битном целом.
- Почему 0xFF показывается и как 255, и как -1?
- Одни и те же восемь бит означают 255 как беззнаковый байт и -1 как знаковый байт в дополнительном коде. Что верно, зависит от типа, в котором хранится значение.
- Есть ли ограничение на размер числа?
- Практически нет: числа до 20 000 цифр переводятся точно, потому что конвертер использует целые произвольной точности, а не числа с плавающей точкой.
- Можно ли переводить дроби?
- Нет, только целые числа. Большинство дробей не имеют точного представления в других системах, поэтому конвертер просит целое число, а не выдаёт округлённый ответ.
- Отправляются ли мои данные куда-либо?
- Нет. Весь перевод выполняется в вашем браузере.