Операции сложения и вычитания производятся путем арифметического сложения кодов чисел. При вычитании перед выполнением операции для вычитаемого берется дополнение. Результат операции представлен в дополнительном коде.
(С)доп = (А)доп + (В)доп
(С)доп = (А)доп - (В)доп = (А)доп + ((В)доп)доп
Пример: вычислить С=А+В и 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
-0 1A Е - FE52
FE51 01AD
+ 1 + 1
FE52 01AЕ
v Восьмеричное кодирование
(А[8])доп=000526 (B[8])доп=177777 ((B[8])доп)доп= 177777
-000656 - 177122
177121 000655
+ 1 + 1
177122 000656
Пример. В ЭВМ выполнена операция сложения 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
Двоично-десятичный код
В некоторых универсальных ЭВМ для кодирования целых чисел применяется смешанный двоично-десятичный код. Своим появлением двоично-десятичный код обязан стремлению производить запись и обработку целых чисел в привычной для человека десятичной системе счисления. Десятичные цифры в этом коде представлены четырехразрядными двоичными числами.
Для кодировки знака используется дополнительная группа бит, расположенная за младшей десятичной цифрой. Знак положительных чисел кодируется как "1100" (С), а знак отрицательных чисел как "1101" (D). Суммарная длина кода должна быть кратна байту. Если длина полученного кода не кратна байту, то перед старшей десятичной цифрой числа добавляется незначащий десятичный ноль.
Пример: Записать число А10 = 951 в двоично-десятичном коде. Код представить в двоичной и шестнадцатеричной форме.
9 | 5 | 1 | C |
цифра | цифра | цифра | знак |
1001 | 0101 | 0001 | 1100 |
Пример: Записать число А10 = -87 в двоично-десятичном коде. Код представить в двоичной и шестнадцатеричной форме.
0 | 8 | 7 | D |
цифра | цифра | цифра | Знак |
0000 | 1000 | 0111 | 1101 |
Дата: 2019-02-02, просмотров: 352.