Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бичков - Основи сучасного програмування.doc
Скачиваний:
69
Добавлен:
07.03.2016
Размер:
2.67 Mб
Скачать

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)

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

Крок 1. У двійковому зображенні абсолютної величини числа всі одиниці замінити нулями, і навпаки.

Крок 2. До отриманого результату додати одиницю.

Застосуємо наведений алгоритм до числа –5. Нехай нас цікавить стандартне 16-розрядне значення. Спочатку зобразимо модуль числа у двійковому вигляді, доповнивши його нулями ліворуч до необхідної кількості розрядів. Тоді десяткове число 5 перетвориться на 0000 0000 0000 0101. Зробимо заміну нулів і одиниць; одержимо 1111 1111 1111 1010. Додамо одиницю й дістанемо відповідь: 1111 1111 1111 1011.

При визначенні величини числа знаковий розряд не використовується, тому числа зі знаком мають максимальне значення, що складається із 15 двійкових розрядів.

Властивостями зображення чисел у додатковому коді є:

1. Повторне застосування розглянутих вище правил переведення в додатковий код повертає вихідне число.

2. Додавання вихідного числа з його додатковим кодом завжди дає нульовий результат, тому що X  (–X)  0. Узагальнюючи цю властивість, можна стверджувати, що замість віднімання завжди можна скористатися додаванням зменшуваного та додаткового коду від'ємника.

5.4.3. Віднімання двійкових чисел

Спочатку розглянемо операцію віднімання для простого двійкового зображення. Щораз, коли цифра в розряді від'ємника більша за цифру в тому самому розряді зменшуваного, запозичується 1 з наступного, старшого розряду. Ця запозичена одиниця дорівнює двом одиницям поточного розряду.

Розглянемо приклади виконання операції віднімання.

1. Потрібно від одного двійкового числа відняти інше:

1

1

0

1

1

1

0

1

1

1

Перший розряд: 1 – 0  1. Записуємо 1.

Другий розряд: 0 – 1. Запозичуємо одиницю в старшому розряді. Одиниця зі старшого розряду переходить у молодший як дві одиниці, тому при вирахуванні одержимо 1.

Третій розряд: одиницю цього розряду ми запозичували, тому зараз у розряді 0. Запозичуємо одиницю зі старшого розряду. Знову одержуємо 1.

2. Виконати 10101.11 – 1010.01:

1

0

1

0

1

.

1

1

1

0

1

0

.

0

0

0

1

0

1

0

.

1

1

Розглянемо віднімання через додатковий код. Його можна замінити на додавання, якщо від'ємник замінити на число в додатковому коді. Маємо

,

де позначена функція одержання додаткового коду,– число, отримане інверсією числа

Запишемо це:

0

1

0

1

(5)

1

1

0

1

(–3)

1

0

0

1

0

(2)

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

Результат алгебраїчного додавання доданків, зображених у додатковому коді, отримується в тому самому коді, що й доданки. Щоб змінити знак числа, необхідно:

 у прямому коді змінити знаковий розряд числа на протилежний;

 у зворотному коді інвертувати код;

 у додатковому коді інвертувати код, додати 1 у молодший розряд.