Формати представлення цілих чисел

Числа в ЕОМ зберігаються відповідно до формату. Формат - це угода або правила подання числа у вигляді послідовності біт.

Мінімальна одиниця зберігання даних в ЕОМ - 1 байт. Існують наступні формати представлення цілих чисел: байт (півслова), слово (включає 2 байти), подвійне слово (4 байта), розширене слово (8 байт). Біти, з яких складаються ці формати, називаються розрядами. Таким чином, в байті 8 розрядів, в слові - 16 розрядів, а в подвійному слові - 32 розряду. Зліва знаходяться старші розряди, а праворуч - молодші. Кожен з цих форматів може бути знаковим (рис. 5.1) для подання позитивних і негативних чисел або беззнаковим (рис. 5.2) для подання позитивних чисел.







Мал. 5.1. Знакові формати представлення цілих чисел

Знаковим є найстарший розряд. На рис. 5.1 знаковий розряд позначений символом S. Якщо він дорівнює 0, то число вважається позитивним, а якщо розряд дорівнює 1, то число вважається негативним.

Мал. 5.2. Беззнакові формати представлення цілих чисел

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

-2 n-1 £ X £ 2 n-1 - 1,

а для беззнакового формату визначається за формулою

0 £ X £ 2 n - 1,

де n - число розрядів в форматі.

Таблиця 5.1. Формати представлення цілих чисел в ЕОМ

0; 4 294 967 295

5.1.2. Прямий і додатковий коди
уявлення двійкових чисел

У прямому коді старший біт кодує знак числа (0 - для позитивного, 1 - для негативного), а інші біти - модуль числа.

Приклад 5.1. Число 11 в прямому коді буде представлятися як 0 | 1011п. а число -11 - як 1 | 1011п. # 9633;

У додатковому коді позитивне число кодується також як і в прямому. Для уявлення негативного числа в додатковому коді, існують два способи. При поданні чисел в додатковому коді використовується операція инвертирования - заміна біта на протилежний, тобто 0 на 1, а 1 на 0.

Правило 5.1. (Порозрядне уявлення негативного числа в додатковому коді) Уявити модуль негативного числа в прямому коді і проинвертировать все розряди лівіше наймолодшій (правої) одиниці.

Приклад 5.2. Уявити число -11 в додатковому коді за допомогою порозрядного уявлення.

Рішення. Переведемо модуль цього числа в двійкову систему: 11 = 10112 і представимо його в прямому коді: 0 | 1011п. Наймолодша одиниця - остання, тому її залишаємо без зміни, а інші розряди зліва інвертуємо (рис. 5.3).

В результаті отримуємо 1 | 0101д - уявлення числа -11 в додатковому коді. # 9633;

Мал. 5.3. Подання числа -11 в додатковому коді

Правило 5.2. (Арифметичне уявлення негативного числа в додатковому коді) Додати до негативного числа 2 m. де m - кількість розрядів в двійковому поданні або даному форматі, і отримане число перевести в двійкову систему числення. Для байта 2 8 = 256, для слова 2 16 = 65 536, для подвійного слова 2 32 = 4 294 967 296.

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

Приклад 5.3. Уявити число -11 в додатковому коді шляхом арифметичного уявлення.

Рішення. Нехай необхідно отримати m = 5 розрядів додаткового коду. Обчислимо доданок 2 m = 2 +5 = 32. Зробимо складання і переклад в двійкову систему числення:

-11 + 32 = 21 = 101012.

Отриманий результат відповідає уявленню числа -11 в додатковому коді.

Для m = 8, 2 8 = 256:

-11 + 256 = 245 = 111101012.

Подання числа -11 було доповнено одиницями зліва до 8 розрядів. # 9633;

Можливо і зворотне перетворення негативних чисел, записаних в додатковому коді.

Правило 5.3. (Поразрядное визначення значення негативного числа, записаного в додатковому коді) Алгоритм визначення значення негативного числа в додатковому коді складається з наступних кроків.

1. проінвертірованний все розряди лівіше наймолодшій (правої) одиниці.

2. Перевести число з двійкової системи числення в десяткову систему за правилом 4.1.

3. Помножити результат на -1.

Приклад 5.4. Визначити, яке десяткове число закодовано числом 1 | 0101д за допомогою порозрядного визначення.

Рішення. Проінвертіруем розряди числа:

Переведемо число з двійкової системи числення в десяткову систему числення:

Помножимо результат на -1 і отримаємо число -11. # 9633;

Правило 5.4. (Арифметичне визначення негативного числа, записаного в додатковому коді) Перевести двійкове число в десяткову систему числення і відняти від отриманого числа число 2 m. де m - кількість розрядів в двійковому поданні.

Приклад 5.5. Визначити, яке десяткове число закодовано числом 1 | 0101д за допомогою арифметичного визначення.







Рішення. Переведемо число з двійкової системи числення в десяткову систему числення:

Віднімемо від отриманого результату перекладу число 2 m = 2 5 = 32, так як двійкове число складається з 5 розрядів:

В результаті отримаємо десяткове число -11. # 9633;

Числа в знакових форматах записуються в додатковому коді, а в беззнакових - в прямому.

Запис в додатковому коді необхідна, щоб додавати і віднімати позитивні і негативні числа без перетворень.

Приклад 5.6. Скласти 21 і -11 в двійковій системі числення.

Рішення. Переведемо складові в додатковий код:

Будемо використовувати правила двійковій арифметики:

1 + 1 = 10 (з перенесенням одиниці в наступний розряд).

Складемо два довічних числа стовпчиком з урахуванням того, що перенесення одиниці з знакового розряду ігнорується:

В результаті отримано число 10 - сума 21 і -11 без додаткових перетворень. # 9633;

Формати цілих чисел слово і подвійне слово зберігаються в пам'яті ЕОМ у зворотному порядку, тобто спочатку молодший байт, а потім старший. Наприклад, слово B5DE16 буде розташовуватися в пам'яті, як показано на рис. 5.4.

Мал. 5.4. Розташування слова B5DE16 в пам'яті ЕОМ

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

5.2. Подання дійсних чисел
в ЕОМ

Речові числа подаються у формі числа з плаваючою комою (крапкою) виду:

де M - мантиса (значуща частина числа); n - основа системи числення; P - порядок числа.

Приклад 5.7. Число 2,5 × 10 18 має мантиссу рівну 2,5, а порядок рівний 18. # 9633;

Мантиса називається нормалізованої, якщо її абсолютне значення лежить в діапазоні:

1 / n £ | M | <1,

де n - основа системи числення.

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

Число з нормалізованої мантиси називається нормалізованим.

Приклад 5.8. Уявити числа -245,62 і 0,00123 в формі числа з плаваючою крапкою.

Рішення. Число -245,62 можна представити у формі числа з порядком -245,62 × 10 0. Мантиса цього цифри не нормалізована, тому поділимо його на 10 3. збільшивши при цьому порядок:

-0,24562 × 10 3.

В результаті число -0,24562 × 10 3 нормалізовано.

Число 0,00123 в формі числа з порядком 0,00123 × 10 0 НЕ нормалізовано, тому що не нормалізована мантиса. Помножимо мантиссу на 10 2. зменшивши при цьому порядок:

0,123 × 10 -2.

В результаті число 0,123 × 10 -2 нормалізовано. # 9633;

В даному прикладі для нормалізації мантиси кома порушувався вправо або вліво. Тому такі числа називають числами з плаваючою точкою. На відміну від чисел з фіксованою точкою, вони значно прискорюють арифметичні операції, при цьому кожен раз необхідно нормалізувати мантиссу чисел з плаваючою точкою.

Для заснованого на стандарті IEEE-754 подання дійсного числа в ЕОМ використовуються m + p + 1 біт, що розподіляються наступним чином (рис. 5.5): 1 розряд знака мантиси; p розрядів порядку; m розрядів мантиси.

Мал. 5.5. Структура загального формату числа з плаваючою точкою

Це уявлення називається (m, p) -Формат.

Діапазон представлення чисел X (m, p) -Формат визначається з нерівності:

£ X £ (1 - 2 - m -1) ».

При цьому порядок числа P повинен задовольняти умові
-2 p - 1 + 1 £ P £ 2 p - 1 - 1

Для дійсних чисел в стандарті IEEE-754 використовуються (23,8) - і (52,11) -Формат, звані одинарним і подвійним речовими форматами відповідно (табл. 5.2).

Щоб уявити значення цих порядків, кількість секунд, що пройшли з моменту утворення планети Земля, складає всього 10 18.

Правило 5.5. (Переклад десяткових чисел в (m, p)-формат) Алгоритм перекладу десяткового числа X в (m, p)-формат складається з наступних кроків.

1. Якщо Х = 0, то прийняти знаковий розряд, порядок і мантиссу за нуль і закінчити алгоритм.

2. Якщо X> 0, то прийняти знаковий розряд 0, інакше прийняти 1. Знаковий розряд сформований.

3. Перевести цілу і дробову частину абсолютного значення числа X в двійкову систему числення. Якщо число дробове, то отримати m + 1 розрядів. Прийняти порядок рівний нулю.

Таблиця 5.2. порівняльні характеристики
речових форматів

4. Якщо X ³ 1, то перенести кому вліво до найстаршого розряду і збільшити порядок, інакше перенести кому вправо до першого ненульового (одиничного) розряду і зменшити порядок.

5. Якщо число розрядів дробової частини менша m, то доповнити дробову частину нулями праворуч до m розрядів. Відкинути одиницю з цілої частини. Мантиса сформована.

6. Додати до порядку зміщення 2 p - 1 - 1 і перевести порядок в двійкову систему числення. Порядок сформований. Код, в якому представлений порядок, називається зміщеним. Усунутий порядок спрощує порівняння, додавання і віднімання порядків при арифметичних операціях.

7. Записати знаковий розряд, порядок і мантиссу в відповідні розряди формату.

Приклад 5.9. Уявити число -25,6875 в одинарному матеріальному форматі.

Рішення. У прикладі 4.7 був проведений переклад абсолютного значення числа -25,6875 в двійкову систему і було отримано 9 розрядів:

Нормалізуємо число, зсунувши кому вліво і підвищивши порядок:

1,100110112 × 2 4.

Після відкидання цілої частини залишається 23 розряду дробової частини (відповідно до формату (23,8)), що записуються як мантиса:

Порядок дорівнює 4 (ступінь двійки після зсуву коми вліво). Зробимо його зміщення і переклад в двійкову систему числення:

4 + 127 = 131 = 100000112.

Число -25,6875 негативне, отже, знаковий розряд дорівнює 1.

Все готово для представлення числа -25,6875 в одинарному матеріальному форматі за схемою знаковий розряд + порядок + мантиса:

1 10000011 +10011011000000000000000.

Розділимо це число по 8 розрядів, сформуємо байти і запишемо їх шестнадцатерічнимі числами:

Таким чином, число -25,6875 можна записати як C1CD8000. # 9633;

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

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

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

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

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