Числа, битовые операции и единицы

калькулятор дополнительного кодаОдин набор битов, два значения

Укажите, вводите ли вы математическое число или уже сохранённый битовый шаблон.

калькулятор дополнительного кода

Ввод

Одно целое число, не более 256 символов. Префиксы 0b/0o/0x должны соответствовать основанию. Внутренние пробелы, разделители, переносы строк и дроби запрещены.

Данные обрабатываются в этом браузере и не отправляются на сервер.

Результаты

Десятичный результат
-42
Ввод в десятичной форме
-42
Десятичное со знаком
-42
Десятичное без знака
214
Двоичное
11010110
Шестнадцатеричное
0xD6
Старший бит
1
Допустимый диапазон ввода
-128 … 127
Знаковый диапазон
-128 … 127
Беззнаковый диапазон
0 … 255
Байты: старший первым
D6
Байты: младший первым
D6

Кодирование отрицательного числа

1. Модуль числа в двоичной форме
00101010
2. Инвертировать все биты
11010101
3. Прибавить единицу
11010110

Параметры

Значение кодирует математическое целое. Битовый шаблон читает неотрицательные биты, дополняет слева нулями и не допускает знак минуса.

Изменение параметра заново интерпретирует текст. Оба порядка байтов используют итоговое слово и сохраняют порядок битов внутри каждого байта.

Ввод находится в выбранном диапазоне.

Этот калькулятор дополнительного кода помогает сопоставить дамп регистра с показаниями отладчика. Запись FF и значение −1 могут описывать один и тот же байт. Прежде чем исправлять данные, проверьте разрядность поля и способ чтения его старшего бита.

Число 255 не помещается в знаковый байт, но шаблон FF полностью помещается в восемь бит. Разные режимы ввода отделяют кодирование значения от чтения готовых битов. Выбор основания больше не скрывает эту разницу, а исходный текст остаётся доступен для проверки.

Зачем нужен калькулятор дополнительного кода

Исходное число остаётся на месте

Этот калькулятор дополнительного кода оставляет 300 в поле, одновременно показывая, что младшие восемь бит дают 44. Переполнение отличается от ошибки записи: оставшееся слово можно исследовать и прочитать двумя способами. Просмотр не заменяет исходное число, и отдельной команды применения усечения здесь нет.

Длинная строка битов остаётся целой, а восемь младших позиций переносятся в короткое слово; старшие позиции выделены отдельно.

Переставляются байты, а не их биты

Для 32-битного 0x12345678 порядок от старшего байта даёт 12 34 56 78, а от младшего — 78 56 34 12. Каждая пара цифр остаётся единым байтом. Знак и числовое значение не меняются: это два способа расположить одно слово, а не инверсия его содержимого.

Два байтовых блока разного цвета меняются местами между строками, сохраняя порядок отметок внутри каждого блока.

Сначала смысл, затем разрядность

01

Определите, что означает текст

По умолчанию выбран ввод −42 в десятичной системе, восемь бит, знаковое чтение и автоматический расчёт. Для готового FF выберите битовый шаблон и шестнадцатеричную систему. Смена основания перечитывает текущий текст, а не переводит содержимое поля в новую систему.

02

Проверьте дополнение при расширении

Шаблон FF при ширине 16 бит становится 00FF и означает 255. Программа не угадывает знаковое расширение по длине текста. Чтобы сохранить математическое −1 при увеличении ширины, введите −1 в режиме значения: тогда 16-битный результат будет FFFF.

03

Экспортируйте только свежий результат

Автоматический расчёт ждёт 350 мс после последней правки. Если его выключить, доступны кнопка расчёта и Ctrl/Cmd + Enter. Любая правка сразу запрещает экспорт старых данных. Пример и очистка сначала показывают число изменяемых полей; применение можно отменить вместе с восстановлением предыдущего результата.

От числа до байтов в памяти

Две десятичные интерпретации

Знаковый диапазон при ширине w равен −2^(w−1)…2^(w−1)−1, беззнаковый — 0…2^w−1. Поэтому восьмибитный FF читается как −1 или 255. Выбранный вариант определяет главное значение и проверку числового ввода, но оба результата и оба диапазона остаются видны для сравнения.

Пошаговое кодирование отрицательного значения

Двоичный дополнительный код для −42 при восьми битах получается из модуля 00101010: инверсия даёт 11010101, прибавление единицы — 11010110. Шаги показываются для отрицательного ввода в режиме значения, если число находится в знаковом диапазоне выбранной ширины, включая его нижнюю границу.

Точность до последнего бита

Беззнаковый максимум 18446744073709551615 обрабатывается целочисленной арифметикой без промежуточного округления через число с плавающей точкой. Двоичная и шестнадцатеричная записи дополняются нулями до ширины слова. Отчёт сохраняет исходный текст, режим, основание, диапазоны и оба порядка байтов, чтобы результат можно было проверить отдельно от страницы.

Границы математической модели

Переполнение означает просмотр остатка
Если значение выходит за диапазон или шаблон шире слова, сохраняются младшие w бит по правилу неотрицательного остатка modulo 2^w. При знаковых восьми битах 128 читается как −128, а 256 оставляет ноль. Исходное число при этом не становится точно представимым: предупреждение остаётся и включается в отчёт.
Короткий шаблон дополняется нулями
Режим шаблона принимает неотрицательное целое и запрещает минус даже в записи −0. Дополнительные ведущие нули не считаются переполнением. Проверяется величина относительно 2^w−1, а не число напечатанных знаков. Старший бит 1 влияет на знаковую интерпретацию, но сам по себе не означает превышения ширины.
Принимается только одно целое
Доступны основания 2, 8, 10 и 16 с соответствующими необязательными префиксами. Ввод ограничен 256 символами. Удаляются только крайние ASCII-пробелы и табуляции. Внутренние разделители, переводы строк, дроби, десятичная экспоненциальная запись и выражения отклоняются. Импорта файлов, URL и пакетного режима нет.
Один знаковый формат и четыре ширины
Поддерживаются 8, 16, 32 и 64 бита. Прямой и обратный код не предлагаются как отдельные способы кодирования или чтения. Нет отрицательного нуля, произвольной разрядности и режима плавающей точки. Строка инверсии служит промежуточным шагом для отрицательного числа, а не самостоятельным декодером другого формата.
Язык и процессор не эмулируются
Математическое приведение не предсказывает исключения, флаги процессора, насыщение или неопределённое поведение компилятора. Порядок байтов меняет только положение целых байтов итогового слова; при восьми битах обе последовательности совпадают. Логические операции, сдвиги и арифметика с двумя операндами относятся к другим инструментам.

Вопросы: калькулятор дополнительного кода

Как выглядит дополнительный код числа −1?

Все биты выбранного слова равны единице. Для восьми бит это 11111111, для шестнадцати — FFFF в шестнадцатеричной записи. Введите −1 как математическое значение и меняйте ширину. Если вместо этого вводить короткий готовый шаблон, программа дополняет его нулями, поэтому результат может отличаться.

Как вычислить код отрицательного числа вручную?

Выберите ширину, запишите модуль числа двоичными цифрами с ведущими нулями, инвертируйте все позиции и прибавьте единицу. Для −5 при восьми битах получится 00000101 → 11111010 → 11111011. Сначала убедитесь, что исходное отрицательное число помещается в знаковый диапазон.

Зачем заранее задавать разрядность?

Она определяет позицию знакового бита, диапазон и число дополняющих нулей. Одно и то же FF означает −1 в восьми битах, но 255 в шестнадцати, где слово выглядит как 00FF. Для чтения дампа нужно указать ширину исходного поля, а не угадывать её по тексту.

Почему байт хранит −128, но не +128?

Старший нулевой бит выделяет половину из 256 шаблонов для нуля и положительных значений. Поэтому положительных чисел только 127, а отрицательных 128. Шаблон 10000000 назначен числу −128, тогда как максимальное положительное значение имеет вид 01111111. Для +128 со знаком нужна большая ширина.

Почему 11111011 можно прочитать как −5 или 251?

Без знака это сумма весов активных битов, равная 251. При знаковом чтении старший бит активен, поэтому из величины вычитается 256 и получается −5. В режиме битового шаблона оба значения отображаются одновременно. Смена трактовки не меняет сам сохранённый байт.

Результат вызывает вопросы?

Проверить следующую границу

Этот калькулятор дополнительного кода поможет проверить граничное значение и сравнить результат при смене режима или ширины. Свежий отчёт сохранит исходный ввод, проверку диапазона и оба прочтения для сопоставления с протоколом или отладчиком.