Как пользоваться
- Введите число, которое нужно перевести.
- В поле «Исходная система» выберите основание, в котором записано число: от 2 до 36 или Base62.
- Результат сразу отображается в двоичной, восьмеричной, десятичной и шестнадцатеричной системах, а также в Base36 и Base62.
- Для любого другого основания выберите его в строке «Другое основание».
Числа, а не байты
Этот инструмент переводит значение числа. Десятичное число 255 в двоичной системе — это 11111111, в восьмеричной — 377, в шестнадцатеричной — ff, а в Base36 — 73.
Байтовые кодировки, такие как Base16 и Base2, делают другое: они кодируют текст или файлы. Текст 255 состоит из трёх символов и хранится как байты 32 35 35 в hex или 00110010 00110101 00110101 в двоичном виде. Используйте эту страницу, чтобы получить hex числа, а байтовые кодировщики — чтобы получить hex символов или файла.
Как устроены позиционные системы счисления
В любой системе вес каждой цифры равен основанию в степени её позиции; позиции отсчитываются справа, начиная с нуля. Шестнадцатеричное ff — это 15 × 16 + 15 = 255, а двоичное 11111111 — это 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255. В системах с основанием больше 10 после цифр идут буквы, поэтому в Base36 a означает 10, а z — 35. В Base62 добавляются ещё и буквы другого регистра, поэтому заглавные и строчные буквы там имеют разные значения.
Одна шестнадцатеричная цифра соответствует ровно 4 битам, а одна восьмеричная — 3 битам. Поэтому программисты используют шестнадцатеричную и восьмеричную системы как краткую запись двоичной: 1111 1111 группа за группой превращается в ff.
Большие и отрицательные числа
Конвертер использует целые числа произвольной точности (JavaScript BigInt), поэтому длинные числа остаются точными. Многие калькуляторы и обычные числа JavaScript теряют точность при значениях больше 9007199254740991 (2 в степени 53 минус 1). Например, parseInt('ffffffffffffffff', 16) возвращает 18446744073709552000, тогда как правильное значение — наибольшее беззнаковое 64-битное целое — равно 18446744073709551615.
Отрицательное число переводится вместе со знаком минус, поэтому -255 в hex — это -ff. Это не дополнительный код, которым в памяти представляются целые числа фиксированной разрядности. Чтобы получить его, сначала прибавьте 2 в степени разрядности: для 8 битов -1 + 256 = 255, то есть ff. Поддерживаются только целые числа, дроби не поддерживаются. Всё работает в вашем браузере.
Перевод между системами счисления в коде
// JavaScript
parseInt('ff', 16); // 255
(255).toString(2); // '11111111'
BigInt('0xffffffffffffffff').toString(10); // '18446744073709551615'
# Python
int('ff', 16) # 255
bin(255), oct(255), hex(255) # ('0b11111111', '0o377', '0xff')
Часто задаваемые вопросы
Как перевести двоичное число в десятичное?
Введите двоичное число, выберите «Двоичная (2)» в поле «Исходная система» и посмотрите десятичный результат. Вручную сложите разрядные веса всех единиц: двоичное 1010 — это 8 + 2 = 10.
Как перевести десятичное число в шестнадцатеричное?
Введите число, выбрав «Десятичная (10)», и посмотрите шестнадцатеричный результат. Вручную последовательно делите на 16 и записывайте остатки в обратном порядке: 255 при делении на 16 даёт 15 и остаток 15, то есть ff.
Есть ли ограничение на размер числа?
Фиксированного ограничения нет. Инструмент использует арифметику BigInt, поэтому число из сотен цифр переводится точно. Очень длинные числа просто обрабатываются чуть дольше.
Почему hex числа 255 здесь отличается от результата кодировщика Base16?
Можно ли переводить числа с дробной частью?
Нет. Конвертер работает только с целыми числами. Дроби вроде 0,1 часто не имеют точного представления в другой системе счисления, поэтому они не поддерживаются.