Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_ЛР_КА_2КСМ_2015-16.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
207.36 Кб
Скачать

1.2 Подання додатних і від’ємних двійкових чисел та правила виконання операції алгебраїчного додавання у додатковому коді

Заміна комп`ютерної операції віднімання операцією додавання спирається на застосування допоміжних додатних чисел, якi взаємно однозначно пов'язанi з вхідними від’ємними числами, будучи спеціальним чином закодованими. Нижче розглянуто так званий додатковий код.

Допоміжні числа можуть бути знайдені, якщо знаковому розряду приписати вагу pn+1. Величину числа A визначить наведена нижче формула (за умови, що для додатних чисел aзн = 0, а для від’ємних чисел aзн = 1):

,

Якщо aзн = 1, то всі числа є від’ємними, а їх абсолютна величина є доповненням того кількісного еквіваленту, що задається основними розрядами числа an,…a-k, тобто дорівнює

.

.Функція кодування правильних дробів у додатковому коді має вигляд

[A]д = А, при А>=0,

[A]д = p + А, при А < 0.

Функція кодування цілих k-розрядних чисел у додатковому коді має вигляд

[A]д = А, при А>=0,

[A]д = pk+1 + А, при А < 0.

Перетворення цифр прямого коду в додатковий код може бути здiйснене як наступна порозрядна операція : одержання в кожному розряді доповнення до р-1; додавання до перетвореного числа одиниці молодшого розряду.

Наприклад, для одержання додаткового коду від’ємного двійкового дробу, необхідно здiйснити наступнi дії: у знаковому розряді записати 1; усі цифри вхідного числа замінити на інверсні (1 - на 0, 0 - на 1); додати до перетвореного числа одиницю молодшого розряду.

Нуль у додатковому коді має єдине значення: 0,000...00.

У додатковому коді операція віднімання заміняється операцією алгебраїчного додавання прямого коду додатного числа та додаткового коду відємного числа.

Оскільки знаковий розряд і цифрова частина числа розглядаються як єдине ціле, то комп`ютер оперує з від’ємними числами так само, як із неправильними дробами.

Правильний знак суми виходить автоматично в процесі додавання вмісту знакових розрядів операндів та одиниці переносу з цифрової частини (за умови її наявностi).

Для обгрунтування справедливостi останнього твердження, припустимо, що числа представлені у формі з фіксованою комою, розташованою перед старшим розрядом та що |A| > |B|. Розглянемо чотири наведених нижче можливих випадки при виконаннi умови |A| + |B| < 1.

Випадок 1. А > 0; В > 0; С > 0.

Оскiльки зображення додатного числа в додатковому коді не відрізняється від його зображення в прямому коді, то сума двох чисел визначається за загальними правилами виду [С]д = С = [A]д + [B]д = А + В.

Правильний знак виходить автоматично, оскiльки знакові цифри доданків дорівнюють 0 та | [A]д + [B]д | < 1 за початковою умовою (нема одиниці переносу до знакового розряду).

Випадок 2. А > 0; В < 0; С > 0.

Оскільки сума є додатною, то результат має бути отриманий у прямому коді: [A]д = A; [B]д = 2 + B; [C]д = C; [C]д = [A]д + [B]д = A + 2 + B.

Правильний знак суми (0) виходить завдяки виникненню такого переносу зі знакового розряду суми, що не повинен враховуватися, оскiльки додавання виконується по модулю 2 (mod 2).

Іншими словами, знайдена сума є порівнянною з результатом по модулю 2, вимагаючи корекції (–2), що здійснюється автоматично, оскільки для зображення числа 2 у розрядній сітці комп`ютеру нема місця.

Приклад. Задано: А = 0,10101, В = –0,01001. Знайти: [C]д

[C]д = [A]д + [B]д = 0,10101 + 1,10111 = 10,01100.

Випадок 3. А < 0; В > 0; С < 0.

[A]д = 2 + A; [B]д = B; [C]д = 2 + C; [C]д = [A]д + [B]д = 2 + A + B.

Оскiльки сума є від’ємною, то вона відразу виходить у додатковому коді. Правильний знак виходить завдяки тому, що один знаковий розряд дорівнює 1 і нема одиниці переносу в знаковий розряд суми (за умовою, | [A]д | + | [B]д | < 1).

Приклад. Задано А = –0,10101, В = 0,01001. Знайти [C]д

[C]д = [A]д + [B]д = 1,01011 + 0,01001= 1,10100.

Випадок 4. А < 0; В < 0; С < 0.

Оскiльки сума є від’ємною, то результат виходить у додатковому коді:

[A]д = 2 + A; [B]д = 2 + B; [C]д = 2 + C; [C]д = [A]д + [B]д = 2 + 2 + A + B.

Виникає перенос зі знакового розряду суми, що не повинен враховуватися, оскiльки додавання виконується по модулю 2 (тобто, як і в другому випадку, сума вимагає корекції –2, що здійснюється автоматично, оскільки розрядна сітка комп`ютеру не має розряду для зображення 2).

Знак результату виходить правильним, оскільки: обидва знакових розряди дорівнюють 1; є одиниця переносу з цифрових розрядів до знакових.

Приклад. Задано А = –0,10101, В = –0,01001. Знайти [C]д

[C]д = [A]д + [B]д = 1,01011 + 1,10111= 1,00010.

У всіх випадках, знак суми формується автоматично в результаті загальних правил порозрядного додавання знакових і цифрових розрядів операндів; якщо доданки поміняти місцями, то правила та результат додавання не змінюються.

При додаванні в додатковому коді, при неправильному виборі масштабних коефіцієнтів k доданків, у першому та четвертому випадках виконання операції додавання можливе переповнення розрядної сітки, ознакою якого є відмінність знаку отриманої суми від знаків доданків.

Приклади.

1. Задані A = 0,10101; B = 0,01110. Знайти [C]д.

[C]д = [A]д + [B]д = 0,10101 + 0,01110 = 1,00011.

2. Задані A = –0,10101; B = –0,01110. Знайти [C]д.

[C]д = [A]д + [B]д = 1,01011 + 1,100010 = 10,00101.

Із наведених прикладів видно, що, при алгебраїчному додаванні двох двійкових чисел у додатковому коді, ознакою переповнення є: наявність переносу в знаковий розряд суми при відсутності переносу з її знакового розряду (додатне переповнення); наявність переносу зі знакового розряду суми при відсутності переносу в її знаковий розряд (від’ємне переповнення).

Якщо наявнi чи вiдсутнi обидва переноси, то переповнення відсутнє.