
1.3.3. Доповняльний код
Для подання від’ємних чисел у двійковій системі числення частіше використовується система доповнення до двох. У ній також є знаковий розряд (0 це “ + ”, а 1 – це “-”). Доповнення виконується у два етапи. Спочатку кожна 1 міняється на 0, а кожний 0 – на 1 (інверсія). Потім до молодшого розряду отриманого результату додається 1. Наприклад, розглянемо перетворення вісьмирозрядного числа - 610 у форму з доповненням до двох:
000001102 = (+ 6)10
111110012 = (- 6 у системі з доповненням до 1)
111110102 = (- 6 у системі з доповненням до 2).
Формула утворення доповняльного коду двійкового числа має вигляд
Адоп
=
(1.3.3)
Приклад 1.3.3. А= - 0,101010; Адоп = 10 + (- 0,101010) = 1,010110.
Як видно з виразу (1.3.3), доповняльний код додатного числа повістю співпадає з зображенням числа у прямому коді.
Порівнюючи від’ємне число А з його доповняльним кодом Адоп, можна вивести наступне правило: щоб записати від’ємне число у доповняльному коді, потрібно у знаковому розряді цього числа поставити одиницю, а у всіх числових розрядах нулі замінити одиницями, а одиниці – нулями і до отриманого результату добавити одиницю до молодшого розряду.
Приклад 1.3.4. Записати двійкове число А = - 0,0101 у доповняльному коді.
А = - 0,010 = Адоп = 1,1010 + 0,0001 = 1,1011.
Щоб перетворити доповняльний код від’ємного числа у прямий код, потрібно виконати друге доповнення, тобто у числових розрядах цього числа замінити нулі на одиниці, а одиниці на нулі (створити обернений код) і додати до отриманого результату одиницю молодшого розряду.
Приклад 1.3.5. Перетворити доповняльний код Адоп=1,1011 від’ємного числа у
прямий код.
Апр= 1,0100 + 0,0001= 1,0101.
У доповняльному коді від’ємний нуль відсутній. Тому доповняльний код використовується частіше, ніж обернений. Але у цій формі є інша особливість. Набір бітів, що складається з 1, за яким йдуть усі нулі (наприклад, 10, 100, 1000, . . .) є доповненням до самого себе.
1.3.4. Модифіковані коди
Ці коди відрізняються від простих машинних кодів тим, що на відображення знака відводиться два розряди: плюс відображається двома нулями (00), а мінус - двома одиницями (11). З погляду побудови АЛП вони зручні для виявлення переповнення розрядної сітки, яке може виникнути при додаванні чисел. Значення 01 та 10 у знакових розрядах свідчать про переповнення розрядної сітки. Невизначеність знаку приводить до того, що результат у цьому випадку буде не коректний, тобто, втрачається.
У модифікованих кодах другий розряд ліворуч від коми визначає знак числа, а перший розряд служить для аналізу переповнення розрядної сітки при виконанні арифметичних операцій над числами.
Перетворення двійкових чисел у модифіковані прямий, доповняльний і обернений коди проводиться за правилами, розглянутими вище.
Приклад 1.3.6. Подати двійкові числа А1= +0,1101101 і А2= - 0,1101101 у прямому,
доповняльному і оберненому модифікованих кодах.
Перетворення чисел у заданий код у комп'ютерах відбувається автоматично як при вводі чисел у комп’ютер, так і при виконанні операцій.