P
pro·school.ru
Каталог школ

Прямой и дополнительный код целого числа

💻 Информатика · 8 класс

Прямой и дополнительный код целого числа

Чтобы хранить отрицательные числа, компьютер использует специальные способы кодирования. Прямой код — это запись модуля числа, в которой старший бит отведён под знак. Дополнительный код — способ, при котором отрицательные числа представляют так, чтобы вычитание сводилось к сложению.

Знаковый разряд

В прямом коде самый левый (старший) бит хранит знак: 0 означает «плюс», 1 означает «минус». Остальные биты хранят модуль числа. Для восьми разрядов это даёт диапазон значений от минус 127 до плюс 127.

ЧислоПрямой код (8 бит)Знаковый бит
+50 00001010 (плюс)
−51 00001011 (минус)
+00 00000000

Зачем нужен дополнительный код

У прямого кода есть недостаток: появляется «два нуля» (плюс ноль и минус ноль), а вычитание требует отдельной схемы. Дополнительный код решает обе проблемы, поэтому именно он применяется в реальных компьютерах.

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

Алгоритм для отрицательного числа в восьми разрядах:

  1. Записать модуль числа в прямом коде.
  2. Инвертировать все биты (получить обратный код): 0 заменить на 1 и наоборот.
  3. Прибавить единицу к младшему разряду.
Число −5:
модуль 5 = 00000101
инверсия = 11111010 (обратный код)
плюс 1 = 11111011 (дополнительный код)

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

Вычитание через сложение

Покажем, как работает приём на примере 7 − 5. Заменяем вычитание сложением с дополнительным кодом числа −5, которое мы получили выше.

7 = 00000111
+ доп.(−5) = 11111011
-----------
1 00000010 ← перенос из старшего разряда отбрасываем
результат = 00000010 = 2

Получили 2, что и есть правильный ответ. Именно поэтому в процессоре нет отдельной схемы вычитания: достаточно сумматора и преобразования вычитаемого в дополнительный код.

Обратный перевод

Если дано отрицательное число в дополнительном коде, его модуль находят тем же приёмом: инвертируют все биты и прибавляют единицу. Знаковый бит, равный 1, сразу подсказывает, что число отрицательное.

ШагДействиеРезультат
1дан код11111011
2инверсия00000100
3плюс 100000101 = 5, значит −5
Запомни: в дополнительном коде ноль только один, а старший бит по-прежнему показывает знак: у всех отрицательных чисел он равен 1.

Кратко о главном

  • В прямом коде старший бит — знак, остальные биты — модуль числа.
  • Дополнительный код позволяет заменить вычитание сложением.
  • Дополнительный код получают: инверсия битов модуля плюс единица.
  • В дополнительном коде нет «двух нулей», и им пользуются настоящие процессоры.