Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
@Мельник_А.О._-_Архітектура_компютера.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
13.82 Mб
Скачать

6.4.2С Додавання двійкових чисел із знаками

Як ми вже бачили в попередньому розділі, існує чотири методи представлення п-роз- рядних чисел із знаками: в прямому, оберненому та доповняльному кодах, а також із зміщенням. В прямому коді старший розряд представляє знак числа, а наступні п-1 роз­ряди представляють модуль числа. В оберненому та доповняльному кодах додатні числа мають те ж саме представлення, що і в прямому. Представлення ж від’ємних чисел тут є іншихм. В оберненому коді від’ємні числа представляються шляхом інверсії їх розря­дів, а в доповняльному коді крім того до молодшого розряду оберненого коду додається одиниця. В представленні із зміщенням всі числа, як додатні так і від’ємні, додаються до зміщення і отримані суми представляються як звичайні числа без знаків. Так від’ємне число к буде представлене як к + Ь > = 0, де Ь - зміщення. Типовим значенням зміщення вибирається число 2п- 1.

Приклад: використовуючи чотирирозрядну сітку (п = 4), представимо в описаних вище кодах число к = - 3 (або в двійковій системі к = - 0112). В прямому коді к = 10112, причому старший розряд є знаковий. В оберненому коді к =1100. , а в доповняльному коді к = 1101 . Для системи із зміщенням, коли зміщення Ь-2п - 1=8, маємо к = 0101 .

■М

Додавання чисел, представлених в прямому коді, вимагає проведення початкового аналізу знаків чисел. Якщо знаки однакові, то модулі чисел додаються, а результату при­своюється їх знак до проведення додавання. Якщо ж їх знаки різні, то модулі чисел відні­маються, а результату присвоюється знак більшого за модулем числа, або знак якщо модулі чисел є рівними.

Додавання чисел, представлених в оберненому та прямому кодах, не залежить від їх знаків і проводиться так само як додавання додатних чисел в прямому коді з тією різ­ницею, що при додаванні чисел, представлених в оберненому коді, необхідно перенос з старшого розряду подавати на вхід переносу молодшого розряду. Представлення в до­повняльному коді використовується значно ширше, ніж в оберненому, оскільки при до­даванні чисел тут перенос із старшого розряду просто ігнорується. Наприклад, додавши 5+(-2) в доповняльному коді маємо 0101 + 11107 = 00117. Тобто отриманий правильний результат 3 0 при ігноруванні переносом із старшого розряду. Якщо ж додати ті ж самі числа в оберненому коді отримаємо 01019 + 11019 + 1 = 00112. Тобто також отриманий правильний результат 3 при врахуванні переносу із старшого розряду. Цей перенос називається циклічним. Додавання до отриманої суми одиниці циклічного переносу не викликає повторного циклічного переносу. Наведений приклад наглядно ілюструє рис. 6.10.

і і

о

0 0 11

1 о 1
1110

0 0 11

Рис. 6.10. Додавання чисел 5 та -2 в доповняльному (зліва) та в оберненому (справа) кодах

Крім того, потрібно зауважити, що в доповняльному коді для представлення нуля існує лише один код - всі нулі, тоді як в оберненому коді два - всі нулі та всі одиниці, що призводить до неоднозначностей.

При виконанні додавання двійкових чисел можливе переповнення, коли отримана сума перевищує діапазон представлення чисел, тобто коли вона виходить за межі роз­рядної сітки. Для інформування програміста про отримання неправильного результа­ту переповнення повинно бути зафіксованим. Для фіксації переповнення аналізуються знакові розряди чисел. Переповнення виникає тільки при додаванні чисел з однаковими знаками і виявити його можна порівнюючи знаки суми і доданків. При переповненні знак суми Б не дорівнює знакам доданків х та у, тобто Signx = Signy =/ SignS.

Для спрощення фіксування наявності переповнення використовуються так звані модифіковані коди з двома знаковими розрядами (тобто 0 представляється як 00, а 1 представляється як 11). Неоднаковість цих розрядів після виконання операції означає наявність переповнення, як це показано на прикладах на рис. 6.11.

і 11 111111

001101011 110110011

+ +

001000001 111010110

010101100 110001001

Рис: 6.11. Приклади виконання додавання двійкових чисел з використанням модифікованих кодів з двома знаковими розрядами

В першому прикладі відбулося переповнення, оскільки два перші розряди, які пред­ставляють знак, не є однаковими.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]