Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

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

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

Как кодируют знак числа и зачем нужен дополнительный код для представления отрицательных целых в памяти.

Программный код на экране
Программный код на экранеMartin Vorel · Wikimedia Commons · CC BY-SA 4.0

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

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

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

В прямом коде самый левый (старший) бит хранит знак: 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.

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

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