Операции сложения и вычитания в дополнительном коде.
Операции сложения и вычитания производятся путем арифметическо- го сложения кодов чисел. При вычитании перед выполнением операции для вычитаемого берется дополнение. Результат операции представлен в дополнительном коде.
(С)доп = (А)доп + (В)доп
(С)доп = (А)доп - (В)доп = (А)доп + ((В)доп)доп
Пример: вычислить С=А+В и D=A-B. Исходные числа А[10]=3, В[10]= -4. Сетка n=5.
Определим дополнительный код для А и В. 1. A[10] = 3 1. |B[10]| = 4,
A[2] =11 |B[2]| = 100
2. (A[2])доп = 00011 2. (B[2])доп = 00100
11011
+ 1
11100
Наличие
единицы в знаковом разряде результата сви-
детельствует о том, что результат представляет собой код отрицательного числа. Определим десятичный эквивалент результата. Для этого возьмем дополне- ние для
результата.
11111
(Инверсия) ®00000
+ 1
00001 ® 1[10] Результат равен –1.
Наличие нуля в знаковом разряде результата свиде- тельствует о том, что результат представляет собой код положительного числа. Определим десятичный эквивалент результата. Для этого достаточно преоб-
разовать двоичный результат в десятичное число. Результат равен +7.
Т.к. разрядная сетка ограничена, то при сложении кодов одинакового знака значение результата может выйти за границы диапазона чисел в данной разрядной сетке. Такая ситуация называется переполнением и обнаруживается по одному из признаков:
1. Знаковые разряды слагаемых одинаковы, а знак результата противо- положный.
2. Наличие переноса в знаковый разряд и отсутствие переноса из знако- вого разряда.
Знак |
|
|
|
Этот признак легко реализуется аппаратным способом в сумматоре. Обычно при возникновении переполнении формируется специальный сигнал. Однако во многих ЭВМ этот сигнал игнорируется. В этом случае контроль диапазонов данных и результата возлагается на программиста.
Пример. Даны числа A[10])=342 и B[10]= -430. Длина разрядной сетки 16. Представить чис- ла в дополнительном коде и выполнить операции сложения A+B и вычитания A-B. Полу- чить десятичные эквиваленты результатов операций.
A[10]= 342, следовательно A[16]= 156 и A[8]= 526 B[10]= -430, следовательно B[16]= -1AE и B[8]= -656
v Шестнадцатеричное кодирование
Определим дополнительные коды чисел и заранее подготовим дополнение для кода вычи- таемого:
(А[16])доп=0156 (B[16])доп=FFFF ((B[16])доп)доп=FFFF
-01AЕ - FE52
FE51 01AD
+ 1 + 1
FE52 01AЕ
v Восьмеричное кодирование
(А[8])доп=000526 |
(B[8])доп=177777 |
((B[8])доп)доп= 177777 |
|
-000656 |
- 177122 |
|
177121 |
000655 |
|
+ 1 |
+ 1 |
|
177122 |
000656 |
Cложение (А)доп+(В)доп |
|
|
Вычитание, т.е. (А)доп+((В)доп)доп |
000526 |
|
|
000526 |
+177122 |
|
|
+000656 |
177650 |
|
|
001404 |
Старший двоичный разряд |
ре- |
|
Старший двоичный разряд резуль- |
зультата равен единице. Резуль- тат соответствует отрицательно- му числу. Берем дополнение для него: 177777 - 177650 000127 + 1 000130 Результат= (64+24)= 88 |
|
тата равен нулю. Результат соответ- ствует положительному числу.
Результат= (1*512+4*64+4)=772[10] |
Пример. В ЭВМ выполнена
операция сложения A+B=R. Числа представлены в дополни- тельном коде. Длина разрядной сетки 16. Код первого слагаемого
(А[16])доп=006D, а код результата
(R[16])доп=005E. Определить код второго слагаемого и
десятичные эквивален- ты слагаемых
и результата.
(R)доп=(А)доп+(В)доп, отсюда (B)доп=(R)доп-(A)доп или
(B) доп=(R)доп+((A)доп))доп.
((A[16])доп)доп=FFFF
-006D FF92
+ 1
FF93
Коды первого слагаемого и результата соответствуют положительным числам. A[10] = 6×161 + 13×160 = 109
R[10] = 5×161 + 14×160 = 94
![]() |
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.