Конвертер Систем Счисления

Работает офлайнНичего не загружаетсяБесплатно, без регистрации
Двоичная—
Восьмеричная—
Десятичная—
Шестнадцатеричная—
Основание—

Биты и дополнительный код

Битовая маска—
Со знаком—
Без знака—

Переводите числа между двоичной, восьмеричной, десятичной, шестнадцатеричной и любой системой до 36 — с точной арифметикой на любой длине и представлением в дополнительном коде, показывающим одни и те же биты со знаком и без.

Одно число в четырёх системах

Системы счисления — это записи, а не значения: 255, 0xFF и 11111111 — одно число, записанное трижды. Шестнадцатеричная заслужила своё место тем, что каждая её цифра — ровно четыре бита: байт всегда две шестнадцатеричные цифры, 0xFF — это 11111111 без всякого счёта. Восьмеричная живёт в основном в правах доступа Unix, где каждая цифра — одна тройка rwx.

ДесятичнаяДвоичнаяВосьмеричнаяHexГде встречается
81000108одиночный бит выше 7
25511111111377ffцелый байт; канал RGB
40961000000000000100001000страница памяти
6553516 единиц177777ffffмаксимум 16 бит без знака; наибольший номер порта
1677721524 единицы77777777ffffff#ffffff — белый, максимум 24-битного цвета

Как читать панель дополнительного кода

Выберите разрядность — панель покажет точную битовую маску, которую хранило бы знаковое целое этой ширины, и прочитает те же биты двумя способами. Числа расходятся, когда установлен старший бит: со знаком он стоит −2w−1, без знака +2w−1, поэтому чтения всегда различаются ровно на 2w. Классика: −1, выглядящий как 255, 4294967295 или 18446744073709551615 — смотря по ширине.

Всё работает в вашем браузере с точной целочисленной арифметикой — ничего из введённого никуда не отправляется.

Частые вопросы

Почему инструмент использует точную арифметику?

Потому что числа, которые сюда приносят — 64-битные хеши, id из баз данных, битовые маски — ровно те, что портит обычная арифметика с плавающей точкой. Number в JavaScript хранит 53 бита точности: parseInt на 0xDEADBEEFDEADBEEF молча теряет младшие биты и всё равно уверенно печатает ответ в каждой системе. Этот инструмент считает целыми числами произвольной точности, поэтому значение любой длины переводится точно.

Что означают префиксы 0x, 0b и 0o?

Так языки программирования помечают систему счисления литерала: 0x — шестнадцатеричная, 0b — двоичная, 0o — восьмеричная. Инструмент принимает префикс при выбранной соответствующей системе и убирает его перед переводом. А 0x в двоичном поле он намеренно отвергает, не угадывая: префикс, противоречащий объявленной системе, — признак того, что выбрано не то поле.

Почему девятка в восьмеричном числе — ошибка?

В каждой системе ровно столько цифр, каково её основание: в восьмеричной 0–7, в двоичной 0–1, в шестнадцатеричной 0–9 плюс a–f. Девятка в восьмеричном числе не может ничего значить, поэтому инструмент отвергает ввод, а не пропускает цифру — пропуск молча перевёл бы другое число, не то, что вы вставили.

Что такое дополнительный код?

Способ, которым компьютеры хранят отрицательные целые. При фиксированной разрядности отрицательное число хранится как его значение плюс 2 в степени разрядности: -1 в 8 битах — это 11111111, то есть та же запись, что у 255. Сами биты не скажут, что имелось в виду — это решает тип в исходном коде. Инструмент показывает оба чтения рядом именно потому, что эта двусмысленность — классический источник багов.

Почему я вижу 4294967295 там, где ждал -1?

Это путаница дополнительного кода в живой природе: 32-битный -1, прочитанный без знака. Маска -1 на 32 битах — тридцать две единицы, и без знака эти биты дают 4294967295. Когда огромное «круглое» число вроде 65535, 4294967295 или 18446744073709551615 появляется на месте маленького отрицательного — знаковое значение прочитано беззнаковым типом, или наоборот.

Зачем нужны основания больше 16?

База 36 — цифры 0–9, затем a–z — самая плотная кодировка, не зависящая от регистра, поэтому её часто используют для коротких id в URL. Варианты базы 32 встречаются в секретах одноразовых паролей и идентификаторах файлов. Конвертер доходит до 36, чтобы такие значения тоже декодировались; выше согласованного алфавита цифр нет.

Похожие инструменты