Скачиваний:
102
Добавлен:
12.05.2015
Размер:
19.91 Mб
Скачать

2.2.1.3 Додатковий код числа

Ще одним способом подання негативного числа є додатковий код, або двійкове доповнення. Двійкове доповнення утворюється відніманням числа фіксованої довжини (тобто доповненого нулями ліворуч) з цілого числа, на одиницю більшого, ніж максимальне число, яке може оброблятися в данній ЭВМ. Наприклад, число -3 можна подати в додатковому коді наступним чином:

(1 0 0 0 0 0 0 0 0 )2  (0 0 0 0 0 0 1 1)2 = (1 1 1 1 1 1 0 1)2

(+256D) (+3D) (+253D або –3D)

Існує, однак, і більш компактний метод одержання додаткового коду. Для цього необхідно: 1) замінити всі нулі на одиниці, а одиниці на нулі в двійковому поданні модуля числа; 2) додати одиницю до результату.

Подання чисел у вигляді додаткового коду має наступні переваги порівняно з іншими формами подання:

  • додавання і віднімання виконуються на практиці просто;

  • існує єдине подання нуля.

Як видно з таблиці 2.7 за допомогою 8 біт можно подати в двійковій формі десяткові числа зі знаком від - 128 до + 127, включаючи 0. В цій таблиці показані два типові для мікропроцесорів способи використання двійкових кодів: як двійкових чисел зі знаком, так і без знака. Лівий стовпчик містить двійкові числа (двійкові коди) від 0000 0000 до 1111 1111, правий стовпчик - їх десяткові еквіваленти від 0 до 255, отримані з припущення, що розглядаються числа без знаку. У центральному стовпчику знаходяться десяткові еквіваленти двійкових чисел лівого стовпчика, отримані з припущення, що негативні числа записувалися в додатковому коді. Тут позитивним двійковим числам (від 0000 0000 до 0111 1111) відповідають десяткові числа від 0 до + 127, а тим, що вміщують 1 в восьмому розряді негативні двійкові числа (від 1000 0000 до 1111 1111) - десяткові від - 128 до - 1.

Використовуючи вісім двійкових розрядів і подаючи негативні числа в додатковому коді, можна записати 256 різних чисел: 127 позитивних, нуль і 128 негативних. Згадану вище процедуру формування доповнення - подання негативного числа в зворотньому коді і додавання одиниці - продемонструємо на наступному прикладі:

Число 410 в двійковій формі

0000 100

Зворотний код числа 410

1111 011

Доповнена до зворотнього коду 12

1

Число 410 в додатковому коді

111 1100

Таблиця 2.7 - Десяткові еквіваленти двійкових чисел

Десятковий еквівалент

8-розрядне двійкове число

Двоійкового числа зі знаком (негативне число в додатковому коді)

Двійкового числа без знака

0000 0000

0000 0001

0000 0010

0000 0011

.

.

.

0111 1100

0111 1101

0111 1110

0111 1111

1000 0000

1000 0001

1000 0010

1000 0011

.

.

.

1111 1100

1111 1101

1111 1110

1111 1111

+0

+1

+2

+3

.

.

.

+124

+125

+126

+127

-128

-127

-126

-125

.

.

.

-4

-3

-2

-1

0

1

2

3

.

.

.

124

125

126

127

128

129

130

131

.

.

.

252

253

254

255

Порівняйте отриманий результат з відповідним кодом в таблиці 2.7.

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

Відповідно таблиці 2.7 арифметичні операції над двійковими числами без знака нічим не відрізняються від подібних операцій над двійковими числами зі знаком, від’ємні з яких подані своїми доповненнями. Це істотно спрощує апаратну реалізацію подібних операцій в мікропроцесорі. Однак слід не втрачати з виду, з якими числами ви маєте справу в даний момент: без знака чи зі знаком. Наприклад, при додаванні двох чисел без знака результат – число без знака подається у вигляді деякої послідовності бітів, котру можна інтерпретувати і як від’ємне число в додатковому коді.

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

В простоті операцій над відємними числами у вигляді доповнень, можна переконатися на прикладі обчислення, яке виконується наступним чином: визначається додатковий код від'ємника і виконується додавання цього коду з зменшуваним. Якщо різниця – число позитивне (біт старшого розряду дорівнює 0), то біт переносу необхідно відкинути: отримана послідовність бітів і є двійковий код. Якщо різниця – число від’ємне (біт старшого розряду дорівнює 1), то вона представлена в додатковому коді. Вище вказувалося, що необхідно зробити для визначення абсолютної величини від’ємного числа, поданого в такому вигляді.

Приклад 1. Обчислити різницю чисел 58 – 23:

а) Визначення додаткового коду числа 23

0 0 0 1 0 1 1 1 Число 2310

1 1 1 0 1 0 0 0 Зворотній код числа 2310

0 0 0 0 0 0 0 1 Одиниця, що додається до зворотнього коду

____________

1 1 1 0 1 0 0 1 Додатковий код числа 2310

б) Обчислення різниці

Десяткова Двійкова

арифметика арифметика

58 0 0 1 1 1 0 1 0 Число 5810

- +

23 1 1 1 0 1 0 0 1 Додатковий код числа 2310

___ ____________

35 1 0 0 1 0 0 0 1 1 Різниця 3510

Одиниця переносу, що відкидається у випадку позитивного результату.

Приклад 2. Обчислити різницю чисел 26 – 34:

а) Визначення додаткового коду числа 34

0 0 1 0 0 0 1 0 Число 3410

1 1 0 1 1 1 0 1 Зворотній код числа 3410

0 0 0 0 0 0 0 1 Одиниця, що додається до зворотнього коду

____________

1 1 0 1 1 1 1 0 Додатковий код числа 3410

б) Обчислення різниці

Десяткова Двійкова

арифметика арифметика

26 0 0 0 1 1 0 1 0 Число 2610

- +

34 1 1 0 1 1 1 1 0 Додатковий код числа 3410

___ ____________

- 08 1 1 1 1 1 0 0 0 Різниця в формі доповнення (оскільки в старшому розряді 1)

в) Визначення абсолютного значення різниці

1 1 1 1 1 0 0 0 Додатковий код різниці

0 0 0 0 0 1 1 1 Зворотній код різниці

0 0 0 0 0 0 0 1 Одиниця, що додається до зворотнього коду

____________

0 0 0 0 1 0 0 0 Абсолютне значення різниці (810).

Другий спосіб визначення абсолютного значення від’ємного числа 11111000:

20+21+22+1=1+2+4+1=8.