Розряд двійкового числа представляється в комп’ютері деяким технічним пристроєм, наприклад тригером, двом різним станам якого приписують значення 0 та 1. Один двійковий розряд, який може набувати ці два значення, є найменшою одиницею інформації, і назвається бітом. Набір відповідної кількості таких пристроїв слугує для представлення багаторозрядного двійкового числа (або в загальному випадку - двійкового коду слова). Розрядність слова може бути від 1 біта до довільної кількості n бітів. Слово із 8 бітів називають байтом. Як правило, коли йдеться про комп’ютерну техніку, всі виміри кількості розрядів наводяться в бітах або байтах. Часто словом іще називають число із 32 бітів, а число із 16 бітів - півсловом.

Коли деяке число має 32 біти, то говорять, що воно представлене з одинарною точністю, якщо ж 64 біти - з подвійною точністю.

Числові дані в комп’ютері зазвичай представляються трьома способами:

Якщо певне число більше за максимальне, яке може бути представлене певною кількістю розрядів, то значення числа може втрачатися. Таку ситуацію називають переповненням. Розробники комп’ютера або програми повинні передбачити, числа якої величини будуть використовуватись, і виділити для їх представлення таку кількість розрядів, щоб значення числа не втрачались.

Сучасні персональні комп’ютери використовують слова розрядністю від одного до 16 байтів. Спеціалізовані комп’ютери можуть використовувати слова й іншої розрядності, наприклад 128 байтів.

Для кодування символів використовуються спеціальні коди, серед яких найпоширеніший у персональних комп’ютерах - американський стандартний код інформаційного обміну ASCII, а в мейнфреймах - розширений двійково-кодований десятковий код обміну EBCDIC. Зазвичай для представлення одного символу використовується один байт.

8.1 Числа з фіксованою комою

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


 - 1≤ число < 1 (якщо є знаковий розряд) або 0 ≤ число < 1 (якщо знакового розряду немає).


На рис. 8.1 показано приклад розрядної сітки комп’ютера (формату даних) для представлення двійкових чисел із фіксованою комою в вигляді 32-розрядних слів для випадків закріплення коми перед старшим і після молодшого розряду. Розряди пронумеровані відносно коми.

Рисунок 8.1 – Розрядна сітка при представленні двійкових чисел з фіксованою комою:
а - кома фіксована перед старшим розрядом а-1;  б - кома фіксована після молодшого розряду а0

 

Для кодування знаку числа використовується знаковий розряд (a31 на рис. 8.1). У цьому розряді 0 відповідає знаку «+», а 1 - знаку «-». На розрядній сітці вказано вагу кожного розряду. Найбільше додатне число, яке може бути представлене в розрядній сітці, показаній на рис. 8.1 а, рівне 0,11111…1 = 1-2-31. Тут після коми розміщена 31 одиниця. А найменше додатне значуще число рівне 0,00 ... 01 =2-31.  Тут після коми розміщено 30 нулів.

В розрядній сітці (рис. 8.1 а) можуть бути представлені числа в діапазоні від -(1-2-31) до -2-31 і від +2-31 до +(1-2-31), що відповідає діапазону абсолютних десяткових чисел приблизно від (1-10-9) до 10-9. Числа |х| < 2-31 не можуть бути представлені в розрядній сітці і приймаються рівними 0 (число виходить за розрядну сітку вправо). Всі числа |х| >=1 також не можуть бути представлені в прийнятій розрядній сітці.

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

Якщо  кома   зафіксована праворуч від молодшого розряду, розрядна сітка   (рис. 10 б) дозволяє представляти додатні та від’ємні цілі двійкові числа, модуль яких 1< = |х| < = 231-1, що відповідає діапазону абсолютних десяткових чисел приблизно від 1 до 109, а також 0.

Всі числа, модуль яких менший 1 або більший (231-1), не можуть бути представлені в цій розрядній сітці (число виходить за межі розрядної сітки).

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

При виконанні науково-технічних розрахунків масштабування є простішим, якщо всі числа по модулю не перевищують 1, тобто кома зафіксована перед старшим розрядом числа.

Комп’ютери, які опрацьовують числа в форматі з фіксованою комою, є простішими (меншими за габаритами) та швидшими порівняно з комп’ютерами, які опрацьовують числа в форматі з плаваючою комою, але в них можливе виникнення проблем через потребу передбачення переповнення. Перші комп’ютери опрацьовували дані з фіксованою комою, причому кома, як правило, фіксувалась перед старшим розрядом числа. Зараз представлення чисел з фіксованою комою використовується як єдине лише в порівняно невеликих за своїми обчислювальними можливостями комп’ютерах, які використовуються для управління технологічними процесами та опрацювання вимірювальної інформації в реальному часі.

В комп’ютерах, призначених для вирішення широкого кола обчислювальних задач, основним є представлення чисел з плаваючою крапкою, яке не вимагає масштабування даних.

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

Розглянемо основні формати чисел із фіксованою комою, що використовуються у сучасних комп’ютерах, та діапазони представлення в них чисел (табл. 8.1).


Таблиця 8.1 - Діапазон представлення чисел у форматі фіксована кома

Інколи під час створення спеціалізованих комп’ютерів зручно ставити кому в іншу позицію (не лише праворуч від молодшого розряду числа або ліворуч від старшого розряду числа), і таким чином виокремлювати певну кількість розрядів для подання цілої частини числа, а також певну кількість розрядів для подання дробової частини числа.

8.2 Числа з плаваючою крапкою

Не завжди діапазон представлення чисел у форматі з фіксованою комою є достатнім для проведення обчислень. В такому випадку використовується формат представлення чисел із плаваючою крапкою.

У загальному випадку в форматі з плаваючою крапкою число подається у вигляді А = ±m · q±p, де m - мантиса числа, q - основа порядку, ±р - порядок числа. Попередній вираз можна записати як А = ± mA · ± рA, де упущено основу порядку, оскільки в комп’ютерах вона незмінна. В більшості випадків основа порядку дорівнює основі системи числення, тобто 2.

Для однозначного і максимально точного відображення чисел число з плаваючою крапкою представляють у нормалізованому вигляді. Якщо виконується нерівність q - 1 < = |ш| <1, а у випадку двійкової системи числення 0.5 < = |ш| <1 (старший двійковий розряд мантиси дорівнює 1), то вважається, що число представлене в нормалізованому вигляді.

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

Для представлення двійкового числа у форматі з плаваючою крапкою у розрядній сітці, наданій для цієї мети, виділяється:

-      по одному розряду для представлення знаку числа Sm (поле знаку числа) і знаку порядку Sp;

-      певне число розрядів для представлення значення порядку р;

-      розряди для представлення значення модуля мантиси m (поле мантиси).

Наприклад, можливий такий варіант, коли формат числа складається з чотирьох полів (рис. 8.2) тобто, [А] = SppASmmA.

Рисунок 8.2 –  Число з плаваючою крапкою

 

Зазвичай у форматі з плаваючою крапкою замість порядку р використовують так звану характеристику ("зміщений порядок") :  

r = ±р + L,

 де L - надлишок (зсув), значення якого підбирається таким чином, щоб у разі зміни значення показника від деякого мінімального значення -|pmin| до максимального +|pmax|, характеристика r змінювалася від 1 до rmax . Отже, характеристика не змінює свого знаку. У цьому випадку відпадає необхідність у відображенні знаку порядку Sp. Для цього приймається, що L = 2к-1, де к - число розрядів, виділених для представлення порядку числа у форматі з плаваючою комою.

 Тоді формат числа з плаваючою крапкою можна подати так, як показано на рис.8.3 (з використанням трьох полів), тобто, 

[А] = SmpAmA .

Рисунок 8.3 – Число з плаваючою крапкою із зміщеним порядком

 

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

Таким чином, мантиса в такому варіанті відображається, починаючи з розряду, що йде після старшого. Це слід враховувати під час виконання будь-якої операції з мантисою числа, і перед початком операцій відновлювати старший розряд мантиси. Після завершення операцій формування нормалізованого результату у відведеній для нього розрядній сітці, старша одиниця мантиси знову відкидається. Порядок із к-розрядним полем може змінюватися в межах від -2k-1 + 1 до + 2k-1 - 1 (табл. 8.3, k = 3).


Таблиця 8.2 - Показники порядку

Як зазначалося, характеристика r - це порядок  р  з  надлишком   1-2k-1.  Вона не змінює свого знаку  і  змінюється від 1 (при р = -2k-1) до 2k-1 (при р = +2k-1 - 1). Винятком є число 0, яке виражається нульовою характеристикою і нульовою мантисою (не обов’язково).

Основною перевагою представлення чисел у форматі з плаваючою крапкою є великий діапазон машинних чисел і висока точність їхнього подання. Діапазон визначається довжиною розрядної сітки, виділеної для характеристики, а точність визначається довжиною розрядної сітки, виділеної для мантиси.

Особливості виконання операцій над числами з плаваючою комою:

-     збільшення мантиси у 2 рази здійснюється зсувом двійкового значення мантиси ліворуч (у бік старших розрядів);

-     зменшення мантиси у 2 рази здійснюється зсувом двійкового значення мантиси праворуч (у бік молодших розрядів);

-     величина числа не зміниться, якщо збільшити мантису в 2 рази і одночасно зменшити порядок на 1;

-     величина числа не зміниться, якщо зменшити мантису в 2 рази і одночасно збільшити порядок на 1.

Тобто формат з плаваючою крапкою має недолік, який полягає у відсутності унікального представлення для кожного числа. Усі числа, що наводяться на рис. 8.4, є еквівалентними. Слід зауважити, що цього недоліку не мають нормалізовані числа.

Рисунок 8.4 –  Еквівалентні двійкові числа в форматі з плаваючою комою

 

Під час арифметичних операцій над числами з плаваючою крапкою виконуються дії як над порядком, так і над мантисою.

У деяких моделях комп’ютерів одержало поширення відображення чисел із плаваючою крапкою з основою порядку, рівною цілому ступеню числа 2 (s =2r). При цьому порядок р відображається двійковим цілим числом, а мантиса m - числом, в якому групи по r двійкових розрядів зображають цифри мантиси з основою системи числення s.

Прикладами вживаних основ порядку є числа 8 та 16.

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

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

Нехай, потрібно подати у форматі з плаваючою крапкою число 17. Для десяткової системи 17 = 17.0 х 100 = 1.7 х 101 = 0.17 х 102. Аналогічно в двійковій системі 1710 = 100012 х 20 = 1000.12 x21 = 100.012 х 22 = 10.0012 х 23 = 1.00012 х 24 = 0.100012 х 25. Якщо використати останній запис, то 8-розрядна мантиса числа буде рівною 10001000, а 5-розрядний порядок буде рівним 00101. Тоді число 17 в форматі з плаваючою крапкою в двійковій системі має вигляд, показаний на рис. 8.5 а. Використовуючи формат з плаваючою крапкою можна представляти числа в значно ширшому діапазоні, ніж використовуючи формат з фіксованою комою, при тих самих 14 розрядах. Так, на рис. 8.5 б) показано число 65536 = 0.1 х 217 у форматі з плаваючою комою, для представлення якого у форматі з фіксованою комою потрібно було б 16 розрядів.

Рисунок 8.5 – Числа 17 а)  та   65536 б)    в двійковому форматів плаваючою крапкою

 

Як вже зазначалося, ідея зміщення порядку полягає в перетворенні його значень лише в додатні числа. Зміщення здійснюється шляхом додавання до кожного значення порядку фіксованого числа, рівного середньому значенню величини діапазону можливих чисел, яке вибирається для представлення нуля. В приведених вище прикладах як зміщення потрібно взяти число 16, тому що воно є середнім між 0 і 31 (порядок має 5 бітів, тому дозволяє представити 25 = 32 значень). Будь-яке число, більше ніж 16, в полі порядку буде представляти додатне значення, а менше - від’ємне. Зауважимо іще раз, що значення порядку з усіма нулями та одиницями зазвичай резервується для спеціальних випадків (таких як нуль та нескінченість).

8.3 Стандарт IEEE-754

Для представлення чисел з плаваючою крапкою у більшості сучасних комп’ютерів використовується стандарт ІЕЕЕ-754. Вище ми розглянули можливі варіанти представлення даних в цьому форматі. До середини 80-х років в різних комп’ютерах використовувались різні варіанти цього представлення, що суттєво ускладнювало виконання на них тих самих програм. У 1985 році Інститут інженерів електротехніків і радіоелектроніків (IEEE) розробив стандарт для чисел з плаваючою крапкою, який офіційно відомий як ІЕЕЕ-754 (1985).

Стандарт ІЕЕЕ-754 для чисел з одинарною точністю використовує зміщення 8-розрядного порядку на 127 (01111111b). Це ще один спосіб представлення чисел із знаком без використання знаку мінус. Мантиса має 23 біти. Із знаковим розрядом (S) включно повна довжина коду складає 32 біти (рис. 8.6).

Рисунок 8.6 – ІЕЕЕ-754 стандарт для чисел з одинарною точністю

 

Значення числа обчислюється за формулою: 

Нормалізована мантиса представляється у прямому коді без знаку, знак мантиси представляється окремо. Суть нормалізації полягає в тому, що мантиса приводиться до вигляду 1.xxxxx, тобто вона знаходиться в межах від 1,000...0 до 1,11...1. Слід зауважити, що оскільки кожна мантиса після нормалізації починається з 1, то нема сенсу зберігати цей розряд, тому він не зберігається у розрядній сітці разом із числом (прихований розряд). Його необхідно просто враховувати під час операцій над числами.

Числа з подвійною точністю в стандарті ІЕЕЕ-754 подаються 64-розрядним кодом, який має знаковий розряд, 11-розрядний модифікований порядок і 52-розрядну мантису (рис. 8.7). Зміщення порядку дорівнює 1023 (01111111111b).

Рисунок 8.7 –  ІЕЕЕ-754 стандарт для чисел з подвійною точністю


Значення числа обчислюється за формулою:

Діапазон чисел, які можуть бути представлені в цьому форматі, показаний на рис. 8.8.

Рисунок 8.8 - Діапазон чисел, які відображаються у форматі за стандартом ІЕЕЕ-754 з подвійною точністю

 

У табл. 8.3 наведено характеристики форматів подання двійкових чисел в стандарті ІЕЕЕ-754 з одинарною та подвійною точністю.


Таблиця 8.3

Як числа з одинарною точністю, так і числа з подвійною точністю в стандарті ІЕЕЕ-754 мають для нуля два варіанти представлення. Коли порядок і мантиса рівні нулю - число є нулем. При цьому значення знаку є несуттєвим. На цю обставину потрібно звертати увагу при проведенні операції порівняння числа з плаваючою крапкою на збіжність з нулем.

Стандарт ІЕЕЕ-754 передбачає використання певної кількості значень мантиси та порядку для представлення нескінчених, невизначених та малих значень. Так мінус та плюс нескінченість подаються максимальним значенням порядку (3778 для числа з одинарною точністю та 37778 для числа з подвійною точністю) та нульовою мантисою. Для представлення невизначеного значення також використовується максимальне значення порядку та ненульова мантиса. Невизначене значення називають “не числом” - Not a Number (NaN). “Не число” використовується, щоб представити значення, яке не є дійсним числом і часто використовується як індикатор помилки, наприклад, коли відбулося ділення 0 на 0. Якщо число є дуже малим, то воно представляється нульовим порядком та ненульовою мантисою. У табл. 8.4 наведено приклади представлення різних величин в форматі за стандартом ІЕЕЕ-754 для чисел з одинарною та подвійною точністю.


Таблиця 8.4 - Приклади представлення різних величин в форматі за стандартом ІЕЕЕ-754

Тут знаком ? позначено несуттєве значення, а (1) - значення, яке не зафіксовується елементами пам’яті комп’ютера.


8.4 Двійково кодовані десяткові числа

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

Двійково-кодоване десяткове число - це десяткове число, кожна цифра якого представлена в двійковій формі. Одна з перших числова система кодування десяткових чисел двійковим кодом (Binary-coded decimal - BCD) була використана в великих і середнього розміру комп’ютерних системах фірми IBM. Система BCD кодує кожну цифру десяткового числа 4-розрядним двійковим кодом. Коли використовується 8-розрядне число, тобто байт, то старші 4 біти називають зоною, а молодші - цифрою. Ця домовленість прийшла з часів перфокарт, де кожна колонка карти могла мати “зональний отвір” в одній з двох верхніх стрічок і “цифровий отвір” в одній з десяти нижніх стрічок. Старші чотири розряди в байті BCD використовуються для представлення знаку, який може мати одне з трьох значень: число без знаку представляється кодом 1111; додатне число представляється кодом 1100; від’ємне число представляється кодом 1101. Кодування для двійково-кодованих десяткових чисел показане в табл. 8.5.


Таблиця 8.5 - Двійково кодовані десяткові числа

Як видно з таблиці, шість можливих двійкових значень (від 1010 до 1111) не використовуються. Хоча втрачається приблизно 40% можливих значень, але набуваються значні переваги в точності. Наприклад, десяткове число 0.3, перетворене в двійковий код та обмежене 8-розрядною сіткою, при зворотному перетворенні має значення 0.296875, тобто похибка складає приблизно 1.05 %. В коді BCD число запам’ятається безпосередньо як 1111 0011, не допускаючи жодної помилки.

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

Приклад. Подамо число -1265 трьома байтами, використовуючи паковані цифри коду BCD.

Зонне десяткове кодування для числа 1265 є наступним:

1111  0001  1111  0010  1111  0110  1111  0101

Після пакування отримаємо:

0001  0010   0110   0101

Додавши знак після цифри молодшого розряду і заповнивши цифру старшого розряду одиницями  до 3 байтів, отримаємо:

1111  0001  0010  0110  0101  1101.

Код BCD (або його іще називають кодом 8421) знайшов найбільше поширення в обчислювальній техніці. Цей код зручний для виконання перетворення з десяткової системи у двійкову і навпаки. Цей код адитивний, тобто сума представлення двох цифр є кодом їх суми.

Разом з тим, використання цього коду пов’язане з труднощами пошуку переносу в наступний десятковий розряд і важкістю переходу до оберненого та доповняльного коду для десяткових чисел. Це пояснюється тим, що код 8421 не є самодоповнюючим, тобто інверсія його двійкових цифр не дає коду доповнення десяткової цифри до 9. В табл. 8.6 наведено інші широко вживані двійково-десяткові коди, а саме код з надлишком 3 та код 2 з 5. Можна побудувати й інші двійково-десяткові  коди, наприклад 2421, 5121 тощо.


Таблиця 8.6 - Двійково-десяткові коди  з надлишком 3 та код 2 з 5

Код з надлишком 3 зручний при виконанні арифметичних операцій над десятковими цифрами, оскільки він є самодоповнюючим. Крім того, легко визначається перенос, так як сума двох доданків, кожне з яких береться з надлишком 3, вийде з надлишком 6, що виключає лишні кодові комбінації. Для отримання правильного коду суми з отриманого результату відкидається 3. У деяких випадках для використання суттєво, що код нуля містить 1 і тому легко відрізнити наявність коду нуля від пропадання коду цифри. Код з надлишком 3 не дуже зручний для перетворення чисел з однієї системи числення в іншу. В коді 2 з 5 десяткові цифри зображаються п’ятьма розрядами, причому кожне значення містить дві 1. Ця надлишковість використовується для контролю правильності передачі цифри. Будь-яка помилка в одному розряді перетворює 0 в 1 або 1 в 0, в результаті вийде більше або менше двох 1, що вкаже на помилку. При одночасній появі двох помилок можливі випадки, коли їх можна не знайти (якщо 0 в одному розряді перетворюється в 1, а в іншому розряді 1 в 0).

8.4 Американський стандартний код інформаційного обміну ASCII

Американський стандартний код інформаційного обміну (American Standard Code for Information Interchange (ASCII)) з’явився завдяки зусиллям розробників покращити засоби передачі даних між системами. Міжнародна організація стандартизації ISO запропонувала цей 7-розрядний код взамін 5-розрядного коду, який використовувався в телетайпах.

Код ASCII визначає коди для 32 символів керування, 10 цифр, 52 букв, 32 спеціальних символів (таких як S та #), а також для символу інтервалу (табл. 8.7). Старший восьмий біт було введено для забезпечення перевірки на парність. Цей біт дозволяє виявляти однократні помилки при передачі даних. Тут значення записані в десятковій системі числення.


Таблиця 8.7 - Таблиця кодів ASCII 

Розшифрування абревіатур з табл. 8.7 наведено в табл. 8.8


Таблиця 8.8 - Розшифрування абревіатур з табл. 8.7 

З підвищенням надійності комп’ютерної техніки важливість біта парності знизилась, тому на початку 80-х років його стали використовувати для розширення набору кодованих символів в межах від 12810 до 25510. Це можуть бути, наприклад, математичні символи, або символи іноземних мов.

8.5  Стандарт кодування символів Unicode

Коди EBCDIC та ASCII забезпечили кодування букв латинського алфавіту. З метою забезпечення кодування букв інших алфавітів та підтримки мов народів світу в 1991 році було запропоновано код під назвою Unicode.

Unicode - це 16-розрядний алфавіт, сумісний з ASCII та погоджений з міжнародним алфавітом ISO/IEC 10646-1. Оскільки 16-ма розрядами можна закодувати 64К символів, цього достатньо для кодування всіх букв алфавітів народів світу.

Кодовий простір коду Unicode вміщує 5 частин, як це показано в табл. 8.9


Таблиця 8.9 - Кодовий простір коду Unicode