Подключиться через MCP →

Введите расчет

Математическая формула

Реклама

Результатов

Two's Complement Binary (8-bit)
11111011
хранимый битовый шаблон
Беззнаковое хранимое значение 251
Трактовка со знаком -5
Дополнительный код (отрицание) 5

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

Дополнительный код (англ. two's complement) — это стандартный способ, которым компьютеры хранят целые числа со знаком в фиксированном числе бит. Этот калькулятор берёт десятичное число и заданную разрядность регистра в n бит, после чего показывает, как именно это значение хранится в виде битового шаблона дополнительного кода, какое беззнаковое значение соответствует этим битам и как те же биты трактуются как число со знаком. Калькулятор работает как с положительными, так и с отрицательными числами.

Как пользоваться

Введите десятичное значение, которое нужно закодировать, и количество бит (чаще всего это 8, 16 или 32). Калькулятор «укладывает» число в регистр из n бит с помощью арифметики по модулю, выводит двоичное представление и расшифровывает его как число со знаком. Отрицательные значения автоматически записываются в форме дополнительного кода.

Разбор формулы

Чтобы записать значение \(x\) в \(n\) бит, хранимый (беззнаковый) шаблон вычисляется так:

$$\text{stored} = \left(\left(x \bmod 2^{n}\right) + 2^{n}\right) \bmod 2^{n}$$

Дополнительный код (отрицание) от хранимого значения равен \(\text{twos} = \left(2^{n} - \text{stored}\right) \bmod 2^{n}\). Чтобы понять знаковый смысл \(n\)-битного шаблона: если шаблон не меньше \(2^{n-1}\), то значение равно \(\text{pattern} - 2^{n}\) (то есть отрицательное), в противном случае это сам шаблон.

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

Пример с расчётом

Закодируем \(-5\) в 8 битах. Здесь \(2^{8} = 256\), поэтому

$$\text{stored} = \left(\left(-5 \bmod 256\right) + 256\right) \bmod 256 = 251$$

В двоичном виде \(251 = 11111011\). Расшифруем 251: так как \(251 \ge 2^{7}\ (128)\), знаковое значение равно \(251 - 256 = -5\). Дополнительный код от 251 равен \(\left(256 - 251\right) \bmod 256 = 5\), что совпадает по модулю.

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

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

Почему отрицательные числа выглядят как длинные двоичные шаблоны? Старшие биты заполнены единицами; в знаковой \(n\)-битной арифметике ведущая единица означает отрицательное число, поэтому 11111011 — это \(-5\), а не 251.

Какой диапазон помещается в \(n\) бит? Знаковые значения охватывают диапазон от \(-2^{n-1}\) до \(2^{n-1} - 1\). Для 8 бит это от \(-128\) до 127.

А если число слишком велико? Значения, выходящие за пределы регистра, «зацикливаются» (переполнение) благодаря операции по модулю — точно так же, как это происходит в реальном железе.

Последнее обновление: