Калькулятор дополнительного кода
Введите целое число со знаком или вставьте двоичный или шестнадцатеричный код и выберите разрядность. Калькулятор покажет дополнительный код, hex, значение со знаком и без знака, а для отрицательного числа — все шаги перевода из модуля.
Работает в браузере: всё, что вы вводите, никуда не отправляется.
Как пользоваться
- Введите значение. Для обычного числа вроде -42 выберите Десятичное, для разбора готового кода — Двоичное или Hex.
- Выберите разрядность: 8, 16, 32 или 64 бита. Короткий двоичный или hex-код дополняется нулями слева.
- Смотрите дополнительный код (по четыре бита в группе), hex и значение этого кода со знаком и без знака. Для отрицательного числа выводятся три шага из учебника.
Как устроен дополнительный код
В n битах отрицательное число x хранится как 2ⁿ + x. На практике это то же самое, что записать |x| в двоичном виде, инвертировать все биты и прибавить 1. Обратно — по старшему, знаковому биту: 0 — число равно своему двоичному значению, 1 — из значения без знака вычитается 2ⁿ.
| Разрядность |
Диапазон со знаком |
−1 хранится как |
| 8 бит |
−128 … 127 |
FF |
| 16 бит |
−32 768 … 32 767 |
FFFF |
| 32 бита |
−2 147 483 648 … 2 147 483 647 |
FFFFFFFF |
Пример
Запишем −42 в 8 битах.
- Шаг 1: 42 в двоичном виде — 0010 1010.
- Шаг 2: обратный код — 1101 0101.
- Шаг 3: плюс 1 — 1101 0110, в hex это D6.
Без знака код 1101 0110 равен 214, а 214 − 256 = −42 — значит, код действительно означает −42. Диапазон для 8 бит калькулятор выводит так: -128 … 127.
Частые ошибки
- Не учитывают разрядность. −1 — это FF в 8 битах и FFFFFFFF в 32. Одни и те же биты при разной разрядности означают разные числа: 1111 1111 в байте — это −1, а в младшем байте 16-битного числа — 255.
- Прибавляют 1 до инверсии. Порядок такой: сначала инвертировать, потом прибавить 1.
- Ищут положительную пару для −128. У самого отрицательного числа нет положительного двойника той же разрядности: инверсия 1000 0000 плюс 1 снова даёт 1000 0000.
Частые вопросы
Как получить дополнительный код отрицательного числа?
Запишите модуль числа в двоичном виде нужной разрядности, инвертируйте все биты (получится обратный код) и прибавьте 1. Для −42 в 8 битах: 42 = 0010 1010, обратный код 1101 0101, плюс 1 — 1101 0110, в hex это D6.
Как перевести дополнительный код обратно в десятичное число?
Если старший бит 0, число положительное и равно обычному двоичному значению. Если 1 — число отрицательное: из значения без знака вычтите 2 в степени разрядности. 1101 0110 без знака — 214, 214 − 256 = −42.
Чем дополнительный код отличается от обратного?
Обратный код — это просто инверсия всех битов модуля, в нём два нуля (0000 0000 и 1111 1111). Дополнительный код — обратный плюс 1: ноль один, а сложение и вычитание работают одинаково для чисел со знаком и без. Поэтому процессоры хранят целые со знаком именно в дополнительном коде.
Какой диапазон помещается в 8, 16, 32 и 64 бита?
От −2^(n−1) до 2^(n−1) − 1: от −128 до 127 в байте, от −32 768 до 32 767 в 16 битах, около ±2,1 млрд в 32 битах и около ±9,2 × 10^18 в 64. Точный диапазон для выбранной разрядности калькулятор показывает строкой ниже.
Что будет, если ввести 200 при 8 битах?
200 не помещается в байт со знаком, но помещается в байт без знака, поэтому калькулятор считает его битовым кодом 1100 1000. Со знаком этот код означает −56. Числа меньше −128 и больше 255 не принимаются.