Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика #12.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
153.94 Кб
Скачать

Обратный код

Также используется для представления отрицательных чисел. Он получается инвертированием всех цифр двоичного кода абсолютной величины числа (модуля числа). Отметим, что все операции с отрицательными числами выполняются в формате машинного слова. Это значит, что к двоичному числу слева дописываются нули до нужного количества разрядов. Например, для 8-миразрядного машинного слова 00000001: 11111110. (данное число является модулем числа -1)

Приведем пример к данной формуле:

10102 – обратный код

A10 = 1*(-23 + 1) + [0*22 + 1*21 + 0*20] = -5

Для положительных чисел aзн=0, и представление числа полностью совпадает с прямым и дополнительным кодом. Таким образом, положительные числа в прямом, обратном и дополнительном кодах изображаются одинаково, то есть двоичными кодами в нулем в знаковом разряде. Обычно отрицательные десятичные числа при вводе в машину автоматически преобразуются в обратный или дополнительный двоичный код, и в таком виде хранятся и участвуют в различных операциях. При выводе таких чисел происходит обратное преобразование в отрицательные десятичные.

Выполнение арифметических операций (сложение и вычитание)

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

При сложении двух чисел X и Y имеет место четыре основных и два особых случая.

  1. X Y > 0

При суммировании складываются все разряды, включая разряд знака.

  1. X > 0 Y < 0 |X|<|Y|

3 + (-10) = (-7) (-10)1110101 00000011 + 11110101 = 11111000 (обратный код -7)

  1. X > 0 Y < 0 |X|>|Y|

10 + (-3) = 7 (-3)11111100 00001010 + 11111100 = 00000110 + 1 = 00000111

Машина исправляет полученный изначально некорректный результат (6 вместо 7) переносом единицы из знакового разряда в младший разряд суммы.

  1. X < 0 Y < 0

(-3) + (-7) = (-10) 11111100 + 11111000 = 11110100 + 1 = 11110101

Полученный первоначально некорректный результат -11 вместо -10 машина исправляет переносом единицы из знакового разряда в младший разряд суммы. При переводе результата в прямой код биты цифровой части (то е без знаковой) числа инвертируются.

Рассмотрим два случая переполнения.

X Y > 0

65 + 97 = 162 01000001+ 01100001 = (1)0100010

Здесь происходит несовпадение знака суммы и знаков слагаемых.

X Y < 0

(-63) + (-95) = (-158) 11000000 + 10100000 = (0)1100000

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

X Y > 0 X + Y ≤ 215

X = 1594 Y = 17563 X+Y=19157

0000 0110 0011 1010 + 0100 0100 1001 1011 = 0100 1010 1101 0101

|X| < |Y|

X = 1594 Y = -17563 X+Y=-15969

0000 0110 0011 1010 + 1011 1011 0110 0101 = 1100 0001 1001 1111

|X| > |Y|

X = 17536 Y = -1594 X+Y=15969

0100 0100 1001 1011 + 1111 1001 1100 0110 = 0011 1110 0110 0001

В последнем случае перенос не учитывается!

X Y < 0 |X| + |Y| < 215

X = -1594 Y = -17563 X+Y=-19157

1111 1001 1100 0110 + 1011 1011 0110 0101 = 1011 0101 0010 1011

Перенос опять же не учитывается!

  1. X>0 Y>0 |X| + |Y| > 215

X = 17563 Y = 19157

0100 0100 1001 1011 + 0100 1010 1101 0101 = 1000 1111 0111 0000

Ответ некорректен ввиду переполнения разрядной сетки. Инвертируем ( +1)

  1. X<0 Y<0 |X| + |Y| > 215

X = -17563 Y = -19157

1011 1011 0110 0101 + 1011 0101 0010 1011 = 0111 0000 1001 0000

Ответ некорректен ввиду переполнения разрядной сетки.

В 5 и 6 случаях ограниченная разрядность чисел приводит к искажению не только величины, но и знака результата. Это исправляется добавлением к результату (случай 5) или вычитанием из него (случай 6) числа 216.

Для обеспечения корректности вычислений перед суммированием необходимо анализировать знаки слагаемых и результаты. Разные знаки слагаемых или совпадение знаков слагаемых со знаком суммы свидетельствует о том, что результат правильный.

Для контроля за выполнением арифметических операций в процессоре содержатся два индикатора: переноса и переполнения. Каждый индикатор принимает либо 0, либо 1. Таким образом, после завершения арифметической операции, в которой происходит перенос в старший бит, индикатор переполнения принимает значение 1. Нет переноса – значение 0. Аналогично работает индикатор переполнения.

Таким образом, пользователь имеет возможность контролировать правильность выполнения арифметических операций.