Зображення від'ємних чисел

Для спрощення виконання арифметичних операцій застосовують спеціальні коди для зображення чисел. Операція віднімання (алгебраїчного додавання) зводиться до арифметичного додавання кодів. Для зображення цілих чисел зі знаком у комп'ютері застосовують прямий, зворотний і додатковий коди.

Загальна ідея побудови кодів така. Код трактується як число без знака, а діапазон чисел, що зображуються кодами без знака, розбивається на два піддіапазони. Перший з них зображує додатні числа, а другий – від'ємні. Коди формуються так, щоб значення старшого розряду вказувало на знак числа, що зображується.

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

Ознакою зображення додатних чисел є наявність нуля в старшому розряді. Наявність у ньому 1 говорить про те, що число від ' ємне. Таким чином, прямий код двійкового числа збігається за зображенням із записом самого числа, але в розряді знака стоїть 0 чи 1 відповідно для додатних чи від'ємних чисел. Наприклад, для чотирирозрядної сітки маємо

0101 (5)

1101 (–5)

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

Операція віднімання зводиться до операції арифметичного додавання за допомогою оберненого й додаткового кодів.

Обернений код. Обернений код двійкового числа А, що зображується в n -розрядній сітці, визначається як I = A, якщо I = , якщо де b – величина найбільшого числа без знака, що розміщується в n- розрядній сітці: для дробових чисел а для цілих . Діапазон чисел, що зображуються зворотним кодом, такий самий, як і для чисел прямого коду: . За означенням, зворотний код від'ємного числа є доповненням модуля вихідного числа до найбільшого числа без знака, що міститься в розрядній сітці. У зв'язку з цим одержання зворотного коду двійкового від'ємного числа зводиться до одержання інверсії n- розрядного коду абсолютної величини цього числа. Оскільки модуль чисел, що зображуються в n- розрядній сітці, , то в старшому (знаковому) розряді зворотного коду в додатних чисел буде 0, а у від'ємних – 1. У цифрових розрядах зворотного двійкового коду зображується або модуль числа (для додатних чисел), або його інверсія (для від'ємних).

Розглянемо операцію алгебраїчного додавання:

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

При виконанні розрахунків на машині може виникнути як додатний, так і від'ємний нуль. Додатний нуль має вигляд:

(+0) = 00000...00 – для прямого зображення;

(+0) = 00000...00 – для зворотного зображення.

Від'ємний нуль має вигляд:

(–0) = 100000...00 – для прямого зображення;

(–0) = 111111...11 – для зворотного зображення.

Щоб уникнути виникнення двох нулів, застосовують додатковий код.

Додатковий код. Перейдемо тепер до питання зображення від'ємних чисел. Для визначеності розглянемо зображення чисел, у якому будь-яке число займає рівно вісім бітів. Із запису у двійковій системі числення рівності (–1) + 1 = 0 легко знайти, який вигляд повинне мати невідоме нам поки що двійкове зображення xxxxxxxx числа –1:

xxxxxxxx + 00000001 = 00000000.

Ясно, що на місці символів xxxxxxxx має бути число 11111111. Правиль­ним результатом додавання при цьому варто було б вважати 100000000, а не 00000000, але в нас є восьмибітове зображення і, оскільки результат має вміститися в байт, то старша одиниця відкидається.

Отже, число –1 кодується як 11111111. Далі вже зовсім просто: для одержання –2 потрібно –1 зменшити на одиницю, що дасть 11111110; число –3 зображується як 11111101 і т. д.

Від'ємні числа завжди містять у двійковому зображенні одиницю в найстаршому розряді, який називають знаковим. Абсолютна величина числа, що кодується, отримується як двійкове доповнення інших бітів (нулі потрібно замінити на одиниці, і навпаки), збільшене на одиницю. Таке зображення називається додатковим кодом.

Додатковий код двійкового числа А, що зображується в n- роз­рядній сітці, визначається як I = А, якщо ; I = , якщо A < 0,де с – величина, що дорівнює вазі розряду, який іде за старшим розрядом використовуваної розрядної сітки: для дробів для цілих чисел Для додатних і від'ємних чисел діапазони значень, що зображуються, різні. Для додатних чисел, як і для прямого коду, а для від'ємних Із визначення додаткового коду випливає, що старший (знаковий) розряд коду додатного числа дорівнює 0, а від'ємного становить –1. Додатковий код від'ємного числа зручно одержувати через зворотний код.

Додатковий код від'ємного числа може бути отриманий зі зворотного додаванням 1 до молодшого розряду зворотного коду. Наприклад, для чотирирозрядної сітки

0101 (5)

1011 (–5)

Для переведення числа в додатковий код можна рекомендувати й такий алгоритм:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: