Прямой и дополнительный код целого числа
💻 Информатика · 8 класс
Прямой и дополнительный код целого числа
Чтобы хранить отрицательные числа, компьютер использует специальные способы кодирования. Прямой код — это запись модуля числа, в которой старший бит отведён под знак. Дополнительный код — способ, при котором отрицательные числа представляют так, чтобы вычитание сводилось к сложению.
Знаковый разряд
В прямом коде самый левый (старший) бит хранит знак: 0 означает «плюс», 1 означает «минус». Остальные биты хранят модуль числа. Для восьми разрядов это даёт диапазон значений от минус 127 до плюс 127.
| Число | Прямой код (8 бит) | Знаковый бит |
|---|---|---|
| +5 | 0 0000101 | 0 (плюс) |
| −5 | 1 0000101 | 1 (минус) |
| +0 | 0 0000000 | 0 |
Зачем нужен дополнительный код
У прямого кода есть недостаток: появляется «два нуля» (плюс ноль и минус ноль), а вычитание требует отдельной схемы. Дополнительный код решает обе проблемы, поэтому именно он применяется в реальных компьютерах.
Получение дополнительного кода
Алгоритм для отрицательного числа в восьми разрядах:
- Записать модуль числа в прямом коде.
- Инвертировать все биты (получить обратный код):
0заменить на1и наоборот. - Прибавить единицу к младшему разряду.
Число −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 | плюс 1 | 00000101 = 5, значит −5 |
Запомни: в дополнительном коде ноль только один, а старший бит по-прежнему показывает знак: у всех отрицательных чисел он равен 1.
Кратко о главном
- В прямом коде старший бит — знак, остальные биты — модуль числа.
- Дополнительный код позволяет заменить вычитание сложением.
- Дополнительный код получают: инверсия битов модуля плюс единица.
- В дополнительном коде нет «двух нулей», и им пользуются настоящие процессоры.