- •2. Обладнання
- •3. Короткі відомості з теорії
- •3.1. Прямий код.
- •3.2. Обернений код.
- •3.4. Додавання чисел, записаних в оберненому коді.
- •3.3. Доповнений код.
- •1. Додатні числа в прямому, оберненому та доповненому кодах мають однакову форму запису.
- •3.3. Переповнення розрядної сітки.
- •4. Порядок виконання роботи.
- •5. Контрольні запитання.
3.4. Додавання чисел, записаних в оберненому коді.
Оскільки додатні числа в прямому та оберненому кодах мають однакову форму запису, то вони додаються однаково.
Розглянемо додавання двох чисел з різними знаками. Нехай число А додатне, а число В - від'ємне, і їх можна записати, як:
Аоб =
Воб =
Тоді їхню суму можна записати, як
Соб =
або
Соб =
(2.8)
Значення
суми
можна
знайти за допомогою звичайних правил
додавання. Можливі два випадки:
1.
Такій
нерівності відповідає |А| < |В|,
отже сума С - від'ємна (
),
а коефіцієнти
можна визначити з рівняння
(2.9)
Таким чином, в цьому випадку також справедливе звичайне правило додавання чисел:
Приклад 2.3.
+6,50d = 0.0110,10bоб
-10,00d = 1.0101,11bоб
-3,50d = 1.1100,01bоб
2.
(2.10)
Нерівність означає, що |А| ≥ |В|, тобто С ≡А - В≥ 0. В даному випадку появляється одиниця перенесення в n-ний розряд числа який відповідає за його знак, а отже можна записати
Тоді співвідношення (2.8) набуває вигляду
Соб =
(2.11)
Це означає, що для отримання оберненого коду суми в розряд з від'ємною вагою слід записати нуль (оскільки А - В є число додатне), а для того, щоби отримати інші розряди числа, необхідно до результату формального додавання добавити одиницю молодшого розряду (2-m). Одночасно появляється одиниця перенесення із розряду з від'ємною вагою. Саме цю одиницю необхідно добавити до молодшого розряду. Така операція, коли одиниця перенесення в n+1 розряд насправді додається до m-го називається циклічним перенесенням.
Вище сказане ілюструє такий приклад 2.4:
+13,50d = 0.1101,10bоб
-5,00d = 1.1010,11bоб
10.1000,01
|–––––→1
+8,50d = 0.1000,10bоб
Аналогічним чином можна показати, що у випадку додавання двох від'ємних чисел також слід виконувати операцію циклічного перенесення:
Приклад 2.5.
-5,00d = 1.1010,11bоб
-3,75d = 1.1100,00bоб
11.0110,11
|–––––→1
-8,75d = 1.0111,00bоб
Таким чином, в випадку додавання чисел, записаних в оберненому коді, завжди слід виконувати операцію циклічного перенесення, однак, якщо перенесення в n+1 розряд рівне нулю, то таке циклічне перенесення аналогічне його відсутності. В випадку реалізації операції додавання чисел в ЕОМ, операція циклічного перенесення призводить до ускладнення схеми суматора та збільшенню часу виконання операції додавання.
3.3. Доповнений код.
Ідея доповненого коду виникає в зв'язку з бажанням позбутися операції циклічного перенесення. Для цього встановити коефіцієнт С в формулі (2.3) рівним -2n. Тоді числа в доповненому коді будуть записуватись як
Aдоп
(2.12)
Порівнюючи (2.4) та (2.12) можна зробити наступні висновки:
1. Додатні числа в прямому, оберненому та доповненому кодах мають однакову форму запису.
2. Від'ємні числа в оберненому та доповненому кодах відрізняються на одиницю молодшого розряду. Для утворення доповненого коду від'ємного числа необхідно записати це число в оберненому коді та додати до нього одиницю молодшого розряду:
Приклад 2.6.
А = +9,625d → 0.1001,101bпр → 0.1001,101bоб → 0.1001,101bдоп
В = -9,625d → 1.1001,101bпр → 1.0110,010bоб
+ 1
1.0110,011bдоп
Перевіримо А + В ≡ 0:
+9,625d → 0.1001,101bдоп
-9,625d → 1.0110,011bдоп
0,0 → 0.0000,000bдоп
Для утворення прямого коду від'ємного числа з доповненого коду навпаки слід відняти одиницю молодшого розряду, а отриманий результат (обернений код) інвертувати (замінити нулі одиницями, а одиниці нулями). Однак даний метод переведення незручний для використання в ЕОМ, оскільки містить операцію віднімання. Тому для знаходження прямого коду з доповненого достатньо утворити доповнений до нього код:
Приклад 2.7.
-9,625d = 1.0110,011bдоп → (1.1001,100bдоп)об
+ 1
(1.1001,101bдоп)доп = 1.1001,101bпр
Нуль в доповненому коді має єдине представлення, оскільки
Приклад 2.8.
(+0)доп = 0.00...00,00...00b
(-0)доп = 1.11...11,11...11bоб
+ 1
0.00...00,00...00bдоп≡(+0)доп
Діапазон чисел, які можна представити в доповненому коді, дещо інший, ніж для оберненого коду. Максимальне додатне число співпадає в цих кодах. Згідно з (2.12) 0.11...11,11...11доп :
,
Мінімальне від'ємне число 1.00...00,00...00доп:
.
Це означає, що від'ємних чисел на одне більше ніж додатних. Причиною цього є єдине представлення нуля в доповненому коді на відміну від двох нулів в оберненому коді.
Якщо
m = 0,
тобто дробові розряди відсутні, то
діапазон чисел, які можна представити
за допомогою k
розрядів, становить від
до
(всього
чисел, враховуючи
один нуль).
Додавання в доповненому коді здійснюється згідно правил звичайного додавання двійкових чисел, розглядаючи знакові розряди як звичайні цифрові. В випадку появи одиниці перенесення із знакового розряду її слід відкинути, тобто циклічне перенесення відсутнє.
Приклад 2.9.
+13,50d = 0.1101,10bпр = 0.1101,10bоб = 0.1101,10bдоп
-5,00d = 1.0101,00bпр = 1.1010,11bоб = 1.1011,00bдоп
10.1000,01
|–––––→1
+8,50d = 0.1000,10bпр = 0.1000,10bоб = 10.1000,10bдоп
↓відкинути
Порівнявши способи представлення чисел в різних кодах, можна зробити наступні висновки:
1. В прямому коді множення та ділення виконуються простіше, ніж в інших кодах, однак він незручний для виконання операції алгебраїчного додавання, оскільки обчислювальний пристрій ЕОМ повинен вміти як додавати, так і віднімати.
2. Переведення чисел з прямого в обернений легко реалізувати, оскільки числа зберігаються за допомогою лінійки тригерів (так званий регістр), кожен із яких має як звичайний, так і інверсний вихід. Недоліком оберненого коду є необхідність виконання додаткової операції циклічного перенесення.
3. В доповненому коді простіше, ніж в інших виконується операція алгебраїчного додавання, оскільки відсутня операція циклічного перенесення. В доповненому коді нуль має єдине представлення.
В сучасних мікропроцесорах використовуються всі види кодування двійкових чисел.
Увага! Прямий, обернений та доповнений коди мають зміст тільки в двійковій системі числення і не можуть бути застосовані до чисел в вісімковій та шістнадцятковій системах числення.
