3. Машинне слово
Сигнали, що грають роль носіїв інформації, представляються в цифрових системах послідовностями біт (байт), що поєднуються в слова. Довжина слова може бути будь-якою (від 4 до 128 біт). Цифрові сигнали можуть представлятися в двох формах: з фіксованої або з плаваючою комою. При представленні числа у формі з фіксованої комою n-розрядне слово розбивається на три частини. Перший біт використовується для знака (0 для позитивних чисел і 1 для від’ємних). Інші розряди розподіляються між цілою і дробовою частинами числа з твердим положенням місця розділення, тобто вказівкою кількості розрядів, що відводяться. Якщо для дробової частини виділено m біт, то найбільше по абсолютній величині число не може перевершувати (2n-1-1)2-m. Обмеження діапазону чисел, що представляються, і тверде розташування фіксованої коми – основні недоліки такого способу, що можуть привести до втрати точності при виконанні арифметичних операцій унаслідок переповнення.
Рисунок 3 – Представлення чисел з фіксованою комою (а) та з плаваючою комою (б).
Більш зручною є форма з плаваючою комою. Вона заснована на співвідношенні N = М*2E , де М – мантиса, E - порядок числа N. Величини М та Е можуть бути як позитивними, так і негативними, але М завжди дробове число, менше одиниці, а Е – ціле число. Обидві ці величини представляються як цілі числа і для кожного з них (включаючи знаки) приділяється в слові визначена кількість розрядів. При цьому розрядність мантиси впливає на точність, а розрядність порядку – на діапазон чисел, що представляються.
Зрушення мантиси на один розряд ліворуч збільшує, а праворуч – зменшує її вдвічі. Щоб такі зрушення не впливали на значення числа, необхідно зменшити або збільшити порядок на одиницю. Зрушення мантиси ліворуч допустимо тільки при наявності старшого нульового розряду. Якщо ж старший розряд дорівнює 1, то це відповідає максимально можливому значенню даної мантиси, що лежить у діапазоні 2-1 <М< 1. Числа з таким представленням мантиси називають нормалізованими, і вони найчастіше використовуються в обчислювальних системах. Процес нормалізації складається в зрушенні числа на необхідну кількість розрядів ліворуч або праворуч з відповідним зменшенням або збільшенням порядку. Якщо мантиса і порядок нормалізованого числа, займають відповідно р и q розрядів, то мінімальне і максимальне значення (у десятковому записі) визначають діапазон представлення чисел Nmіn < N < Nmax
та
.
У цьому відношенні форма з плаваючою комою краща.
При додаванні чисел з плаваючою комою, необхідно спочатку вирівняти показники доданків, для чого мантиса одного з них зрушується на число розрядів, рівне різниці показників. Множення зводиться до визначення добутку мантис і суми показників. Відповідні операції виконуються над цілими числами, а результат нормалізується.
4. Додавання та віднімання двійкових чисел
Додавання цілих багаторозрядних чисел у двійковій системі числення робиться порозрядно. У результаті додавання 1 + 1 одержуємо 102 = 210. Для представлення такого результату потрібно два розряди; при цьому з молодшого розряду в наступний, більш старший розряд, надходить одиниця переносу. Перенос додається до відповідного розряду чисел, що додаються (рисунок 4).
Рисунок 4 – Схема додавання цілих багато розрядних чисел
Додавання здійснюється послідовно, починаючи з молодшого розряду. У кожному розряді додаються значення трьох величин: розряду операнда аі, розряду операнда bі та переносу з попереднього розряду pi-1. У результаті додавання в кожному розряді одержуємо дві величини: значення суми sі, значення переносу в наступний, більш старший розряд pі. У розглянутому прикладі при додавання чисел А = 3910 = 1001112 і В = 1310 = 0011012 отриманий результат S = 5210 = 1101002, який містить шість розрядів, тобто укладається в прийняту розрядну сітку. Додамо до отриманого результату 5210 (1101002) число 1310 (0111012):
-
110100
52
+
001101
+
13
1000001
65
У підсумку одержали число, що містить сім розрядів, старший з який відповідає розряду переносу, що знаходиться за межами розрядної сітки. Наявність одиниці в розряді переносу повідомляє про переповнення розрядної сітки.
Негативні числа можуть записуватися у виді прямих, зворотних або додаткових кодів. Знаковий розряд позитивних чисел дорівнює нулю, а від’ємних – одиниці, і відокремлюються від інших розрядів крапкою. Негативні числа переважно застосовуються у сучасних мікро-ЕОМ у додаткових кодах.
Операція одержання додаткового коду негативного числа з прямого коду називається операцією доповнення. Ця операція полягає в інвертуванні всіх розрядів вихідного коду (включаючи знаковий) і додаванні до молодшого розряду одиниці. Застосуємо операцію доповнення до прямого коду числа 0.1101002 = + 5210. Результат 1.001100 відповідає додатковому коду негативного числа -5210. Якщо до цього результату ще раз застосувати операцію доповнення, то знову одержимо вихідний код 0.110100.
Таким чином, у системі двійкових чисел зі знаком заміна позитивного числа на рівне йому по модулю негативне і навпаки, негативного - на позитивне, здійснюється застосуванням до коду даного числа операції доповнення. Ця властивість представлення від’ємних чисел у додаткових кодах дозволяє при виконанні арифметичних операцій узагалі відмовитися від операції віднімання, замінивши її операцією додавання з числом, що має знак, протилежний знаку від'ємника.
Додавання двійкових чисел, представлених у формі з фіксованою комою, виконується аналогічно додаванню цілих чисел. Номера розрядів визначаються їх розташуванням у числі щодо коми, яка відокремлює цілу частину від дробової. Порядок додавання не залежить від розташування коми. Тому операцію додавання розглянемо на прикладі додавання цілих чисел.
Приклад 1. Додавання двох позитивних чисел:
-
0,100111
39
+
0,001101
+
13
0,110100
52
Результат не виходить за межі розрядної сітки і тому правильний.
Приклад 2. Додавання двох позитивних чисел:
-
0,110111
52
+
0,001101
+
13
1,000001
–
63
У результаті додавання вийшло негативне число –63, тобто результат додавання невірний, оскільки вірний результат + 65 виходить за межі розрядної сітки. Дійсно, прийнята розрядна сітка забезпечує представлення двійкових чисел у межах від 1.0000002 = – 6410 до 0.1111112 = +6310, а отримана сума + 65 перебуває за її межами.
Приклад 3. Додавання двох чисел з різними знаками:
-
1,001100
–
52
+
0,001101
+
13
1,011001
–
39
Результат додавання вірний і має знак більшого по модулю числа. При додаванні чисел з різними знаками модуль результату завжди не перевищує модуля кожного з вихідних операндів. Тому переповнення розрядної сітки неможливо.
Приклад 4. Додавання двох чисел, рівних по модулі і різних за знаком:
-
1,011001
–
39
+
0,100111
+
39
10,000000
0
Результат додавання вірний, якщо ігнорувати одиницю в розряді переповнення, розташованому за межами розрядної сітки.
Приклад 5. Додавання двох від’ємних чисел.
-
1,011001
–
39
+
1,110011
–
13
11,001100
–
52
Сума знаходиться в межах розрядної сітки, тобто результат вірний, якщо зневажити одиницею в розряді переповнення.
Приклад 6. Додавання двох від’ємних чисел:
-
1,001100
–
52
+
1,110011
–
13
10111111
+
63
Сума перебуває за межами розрядної сітки, тобто результат невірний і має позитивний знак. Одиницею в розряді переповнення ігноруємо.
Розглянуті приклади підтверджують те, що при додаванні чисел зі знаком у додаткових кодах значенням розряду переповнення потрібно ігнорувати.
Можливі випадки одержання невірних результатів за умови, якщо числа, що додаються, мають однаковий знак, а знак суми - протилежний. Результат виконання операції додавання чисел повинний обов'язково перевірятись, щоб уникнути одержання невірного результату. Правило перевірки таке:
- якщо знак операндів однаковий, а знак суми йому протилежний, то результат буде некоректний;
- із всіх інших випадках результат додавання вірний.
Випадок, коли отриманий результат виходить за межі припустимого діапазону представлення чисел, називається переповненням розрядної сітки.
