Сторінка
3
<знак><порядок><мантиса>. Поле <знак> має довжину 1, а довжини двох інших позначимо d і r відповідно. Зрозуміло, що 1+d+r=8N. Нехай s, e, m – значення цих полів як беззнакових цілих. Вони подають: s = 0 – знак '+', s = 1 – знак '-'; e – його порядок t = e - (2d-1-1); m – мантису (дробову частину) m1 = m× 2–r. За значень e, відмінних від крайніх значень 0 та 2d-1, поля <знак><порядок><мантиса> задають число, що є значенням виразу (-1)s× (1+m1)× 2t (11.2) Оскільки 1£ 1+m1<2, то кажуть, що число подається в нормалiзованому виглядi. Показник t називається справжнім порядком числа, а e – "зсуненим" (він на 2d-1-1 більше від справжнього). Отже, значення e від 1 до 2d-2 задають справжні порядки t від 1-(2d-1-1)=2-2d-1 до 2d-2-(2d-1-1)=2d-1-1. Наприклад, нехай d=5, r=10, що задає двобайтове подання. Зсув порядку 25-1-1=24-1. Розглянемо зображення числа -12.375: -12.375 = (-1100.011)2 = (-1.100011)2× 23 , тобто t=3, m1=0.100011. Звідси s=1, e=3+(24-1)=18=(10010)2, m=1000110000, і число подається послідовністю бітів 1'10010'1000110000. Тут для наочності поля відокремлено апострофами. Послідовність бітів 0'00001'0000000000 подає мінімальне додатне число, зображуване за d=5, r=10: (1 + 0)× 21-24+1 = 2-14. Наступним числом, що подається як 0'00001'0000000001, буде
(1+2-10) × 21-24+1=2-14+2-24. Послідовність бітів 0'11110'11111111111 подає максимальне число (1+(210-1)× 2-10)× 225-2-24+1 = (2-2-10)× 215 =216 - 25 = 65504. Попереднє перед ним число має подання 0'11110'11111111110 і є (1+(210-2)× 2-10)× 225-2-24+1 = (2-2-9)× 215 =216 - 26 = 65472. Як бачимо, різниця між двома сусідніми числами міняється від 2-24 до 25=32. За e=0 незалежно від s і m подається число 0. За e=2d-1 подання числа використовуєтьсся спеціальним чином, про що ми говорити не будемо (докладніше про це див., наприклад, [Григ]). Зазначимо, що розташування й довжини полів у поданні дійсних чисел залежать від конкретного типу комп’ютера і можуть відрізнятися від указаних тут. Можливі й інші особливості. Задачі 8. Нехай a і b – імена змiнних бульового типу. Довести еквівалентнiсть виразів у наступних парах: а) a <= b та not a or b; б) a < true та not a. 9.* Указати внутрішнє подання символів, заданих виразами: а) chr(0), chr(48), chr(57), chr(13), chr(10), chr(65), chr(97); б) 20h, 30h, 1Ah, 1Bh, де суфікс "h" указує на шістнадцятковий запис. 10. Написати програму, яка для комп'ютера з невідомою системою подання чисел дозволяє визначити максимальне та мінімальне цілі типу integer. 11.* Указати двобайтовий додатковий код чисел -1, -8, -9, -32767, -32768. 12.* Нехай при додаваннi та відніманнi чисел типу integer перенос із старшого розряду стає змістом знакового розряду, а перенос із знакового розряду втрачається. Чому дорівнює значення виразу: а) maxint + 1; б) minint - 1, де maxint та minint позначають максимальне та мінімальне числа типу integer? 13.* Обчислити мінімальне та максимальне за модулем скінченні дійсні числа, що подаються в а) 4 байтах за d = 8, r = 23; б) 8 байтах за d = 11, r = 52; в) 10 байтах за d = 16, r = 63. 14. Нехай d і r з описання подання дійсних чисел невідомі. Написати програму а) обчислення d і r; б) друкування виразів, що задають мінімальне та максимальне додатні числа типу real; в) друкування виразу різниці між двома сусідніми зображуваними числами з відрізка [2i; 2i+1] за допустимих значень i.
3. Цілі та дійсні типи мови Турбо Паскаль Базовий тип цілих integer утворено цілими, які займають 2 байти в знаковому поданні. Тепер уже зрозуміло, чому їх діапазон від -32768 до 32767. Крім цього типу, в мові Турбо Паскаль є ще кілька типів для подання цілих. Укажемо їх імена, спосіб (знаковий/беззнаковий) та розміри подання в байтах, а також їх діапазони.
Тип Byte – беззнакові в 1 байті, 0 255. Тип Shortint – знакові в 1 байті, -128 127. Тип Word – беззнакові в 2 байтах, 0 65535. Тип Longint – знакові в 4 байтах, -2147483648 2147483647. Для всіх цих типів означено всі операції, що й для типу Integer. Числа базового типу Real займають 6 байтів. 1 біт зайнятий знаком числа, 39 – дробовою частиною, 8 – порядком. Нескладно підрахувати, що діапазон додатних чисел – від 2-126» 2.9´ 10-39 до (2-2-39)´ 2127» 1038. Значення типу Single займають 4 байти (дробова частина – 23 біти, порядок – 8). Діапазон додатних значень – від 2-126 до (2-2-23)´ 2127» 1038. Значення типу Double займають 8 байтів (дробова частина – 52 біти, порядок – 11). Відзначимо, що з урахуванням особливостей архітектури сучасних комп'ютерів краще користуватися цим типом, ніж типом real [Григ]. Діапазон додатних значень – від 2-1022» 10-315 до (2-2-52)´ 21023» 10315. Значення типу Extended займають 10 байтів (дробова частина – 64 біти, порядок – 15). Діапазон додатних значень – від 2-16382» 10-4931 до » 2´ 216383» 104932. Відзначимо, що в процесорі комп'ютера числа обробляються саме в поданні типу Extended. При записі в регістри процесора числа з інших типів перетворюються в цей. Отже, цей тип має найбільший серед дійсних типів діапазон та найвищу точність подання дійсних чисел. Значення типу Comp (скорочене compound – складений) займають 8 байтів. Ці значення є дійсними поданнями цілих чисел від -263 до +263-1. До них застосовні операції дійсних, а не цілих типів. І останнє зауваження. Кількість байтів, які займаються значеннями будь-якого типу, можна дізнатися, викликавши функцію SIZEOF. Наприклад, із виклику sizeof(Longint) повертається 4, із виклику sizeof(Word) – 2. Задачі 15. У діалекті Турбо Паскаль на цілих типах визначена операція "додавання за модулем 2" із знаком xor. Вона виконується шляхом побітового додавання операндів за правилами 0Å 0=1Å 1=0, 1Å 0=0Å 1=1, тобто без переносу 1 у наступний розряд. Наприклад, у типі Byte 220 xor 127 =163 – це добре видно в байтовім поданні: Å 11011100 01111111 10100011 Довести її властивості: якщо a, b, c позначають довільні цілі операнди, то a xor a = 0, a xor 0 = a, a xor b = b xor a, (a xor b) xor c =a xor (b xor c), (a xor b) xor b = a.