У цифрових ЕОМ числова інформація може надаватися у двох формах:
- з фіксованою точкою (природна форма);
- з плаваючою точкою (експоненціальна форма).
При поданні чисел з фіксованою точкою мається на увазі, що положення точки, що розділяє число на цілу і дробову частини, незмінно для всіх чисел. Ця форма найбільш проста, природна, але має невеликий діапазон представлення чисел і тому не завжди прийнятна при обчисленнях. У сучасних ЕОМ природна форма використовується, наприклад, для представлення цілих чисел (дрібна частина числа завжди відсутній), грошових сум (дрібна частина завжди становить чотири знаки).
Подання з плаваючою точкою будь-якого числа N в загальному вигляді описується наступною формулою:
де ± M - мантиса (дрібна частина) числа; p - основа системи числення; ± k - порядок (ціле число), при цьому позитивний знак мантиси і порядку може опускатися, а при вказуванні порядку в десятковій системі прийнято використовувати символ Е. Наприклад, десяткове число з фіксованою точкою 123,45 може бути представлено у формі з плаваючою точкою як 0,12345 × 10 3. або, як це прийнято, 1,2345Е +02. Така форма подання має величезний діапазон відображення чисел і є основною в сучасних ЕОМ.
Для подання позитивних і негативних чисел в машинах використовуються спеціальні коди: прямий, зворотний і додатковий. Причому два останніх дозволяють замінити незручну для ЕОМ операцію віднімання на операцію складання з негативним числом; додатковий код забезпечує більш швидке виконання операцій за допомогою суматора, тому в ЕОМ застосовується частіше саме він. Розглянемо правила кодування на прикладі цілих чисел.
Для перекладу числа в прямий код знак числа опускається, а в старший (знаковий) розряд ставиться 0, якщо число позитивне, і 1 - якщо число негативне. Молодші розряди коду є двійковим поданням модуля числа. Решта розряди коду заповнюються нулями. Відзначимо, що переклад позитивних чисел в прямій, зворотний і додатковий код не змінює зображення цих чисел (табл. 3).
Для перекладу негативного числа в зворотний код необхідно все розряди прямого коду, крім знакового, інвертувати (замінити нулі одиницями, а одиниці - нулями).
Для перекладу негативного числа в додатковий код необхідно до молодшого розряду його зворотного коду додати одиницю.
Переклад негативного числа з додаткового коду в прямій здійснюється в зворотній послідовності: спочатку віднімається одиниця, потім інвертується розряди. Відзначимо, що позитивне число (0 в старшому розряді) зворотного перекладу не береться, і має однакову запис як в прямому коді, так і в додатковому.
Приклади представлення цілих чисел
в шістнадцяткових довічних кодах
1111 1111 1110 1100
При написанні програм важливо визначити діапазони значень і форми подання оброблюваної інформації. Наприклад, в мовах програмування сімейства BASIC (Бейсік) типи змінних INTEGER і LONG використовуються, відповідно, для зберігання цілих чисел зі знаком в шестнадцатіразрядного (два байта, або півслова) і трідцатідвухразрядном (чотири байти, або машинне слово) додатковому коді.
Знак числа фіксується в нульовому біті першого байта (крайній лівий біт). Цифрова частина числа зберігається в інших бітах поля числа, причому молодший двійковий розряд числа знаходиться в останньому, правом бите останнього байта. Змінні типу SINGLE і DOUBLE використовуються для зберігання чисел з плаваючою точкою в чотирьох або восьми байтах (подвійне слово) відповідно.
Знак зберігається в нульовому біті, біти 1-7 відводяться під порядок числа, інші біти використовуються для розрядів мантиси. Як правило, мантиса зберігається в нормальному вигляді, тобто першим її розрядом не є 0.
Для спрощення операцій над n-розрядними порядками чисел з плаваючою комою використовується зміщений код, або так званий код з надлишком 2 n - 1. Тобто значення діапазону [-2 n -1; 2 n - 1 -1] зміщуються в діапазон [0; 2 n -1], що дозволяє працювати з порядками як з цілими без знака.
У різних перетворювальних пристроях (для кодування положень валів, дисків і т.п.) широко використовується код Грея (табл. 4). Головна особливість коду - сусідні кодові слова різняться лише в одному розряді. Тому при послідовному переході від числа до числа похибка зчитування не перевищує одиниці молодшого розряду незалежно від того, в якому розряді мала місце невизначеність. Для перекладу числа з коду Грея в звичайний двійковий код все нулі і першу одиницю з боку старших розрядів залишають без зміни. Кожен наступний розряд або інвертується, якщо число попередніх одиниць непарній, або залишається без зміни.
Подання десяткових чисел в четирёхразрядном коді Грея