Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / 4_кол / К курсовой / Методи побудови алгоритмів та їх аналіз / Інформатика_1 (методи побудови алгоритмівта та їх аналіз).doc
Скачиваний:
87
Добавлен:
30.05.2020
Размер:
2.5 Mб
Скачать

Числова інформація Цілі числа

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

Розглянемо однобайтові цілі числа. У Pascal ці типи носять назву byte і shortint.

Змінні типу byte є беззнаковими, тобто можуть набувати ли­ше невід'ємних значень. Десяткове число, якого набуває змін-на такого типу, спочатку переводиться у двійковий вигляд і за-писується в область пам'яті комп'ютера, починаючи з визначе-ної операційною системою адреси. Нумерація розрядів (бітів) однобайтової області, визначеної для збереження значения та­кого числа, ведеться справа наліво.

Схематично представления в пам'яті комп'ютера однобайто­вого десяткового числа 147 можна зобразити так (табл. 4):

Таблиця4 Байт

;•

6

5

4

3

2

1

0

1

0

0

1

0

0

1

1

Тепер зрозуміло, чому для змінних типу byte визначений діапазон зміни значень від 0 до 255. Справді, найменше число, двійкове зображення якого можна розмістити в такій роз-рядній сітці, дорівнює 0, а найбільше 255.

Змінні типу shortint можуть набувати і додатних, і від'єм-них значень. Знак числа заноситься у старший, 7-й розряд у такому вигляді: якщо число додатне, то значения цього роз-ряду О, а якщо від'ємне, то 1.

Спробуемо тепер «прочитати» інформацію з тієї самої облас-ті пам'яті, що і в попередньому прикладі, але припустивши, що це значения числа типу shortint (табл. 5).

Таблиця5 Байт

7

6

5

4

3

2

1

0

1

0

0

1

0

0

1

1

52

Для того щоб визначити десяткове представления запису 10010011, иагадаємо, як у комп'ютері отримуються від'ємиі числа. Спочатку знаходиться двійкове представления модуля задаиого десяткового числа, потім робиться інверсія отримано-го запису, додаеться число 1 і виділяється зліва така кількість двійкових знаків, яка відповідає вказаному типу. Нам же тре­ба всі вказані дії виконати у зворотному порядку:

  1. віднімемо від числа 100100112 число 12: 100100112 - 12 = - 100100102;

  2. інвертуємо цифри отриманого двійкового запису: 100100102=>011011012;

  3. переведемо отримане двійкове число у десяткову систему числення: 01101101, = 10910.

Отже, отримали число 109, яке в машинному представленні виглядає як 10010011.

Тепер визначимо діапазон зміни значень змінних типу shortint.

Знайдемо спочатку максимально можливе додатне число. Його двійкове представлення повинно мати у старшому розряді 0, а всі решта розрядів -1: 0111111. При переведенні в десяткову систему числення отримаємо: 011111112 = 127,0. Мінімальне додатне число 0, а його двійкове представлення - 000000002.

Як відомо, від'ємні числа в двійковому представленні міс-тять у старшому розряді значения 1. Тому двійковим аналогом до 0111111 у від'ємній області буде 11111111, а до 00000000 -10000000. Які ж десяткові числа відповідають цим двшковим кодам? За наведеним вище алгоритмом визначимо, яке де­сяткове число мае представлення 1111111:

  1. 1111111,-12-111111102;

  2. 111111102=* 000000012;

  3. 000000012 = 110.

Оскільки ми визначали від'ємне число, то отримали, що двійкове представлення 1111111 відповідає десятковому чис­лу -1. Можна сказати, що це максимальне число у від'ємній об­лает!, так само як і 127, - максимально можливе число в до-датній області значень типу shortint.

Тепер розглянемо таке двійкове представлення 10000000 і визначимо, якому від'ємному десятковому числу воно ВІДПО-відає:

  1. 100000002 - 12 = 011111112;

  2. 011111112 => 10000000,;

  3. 100000002 = 128,0.

Ми отримали відповідь на запитання, яке від'ємне десятко­ве число представляється двійковим кодом 10000000. Це чис­ло —128. Можна стверджувати, що це найменше від'ємпе чис­ло, яке може бути пред став лене двшковим кодом із 8 бітів.

53

Саме такий діапазон значень для змінних типу shortint на­водиться в усій літературі, що присвячена мові програмування Pascal.

Надалі вже не будемо приділяти стільки уваги логічним висновкам визначення діапазонів значень для інших типів змінних.

Двобайтові цілі числа (у Pascal ці стандартні типи носять назву word та integer). Розрядна сітка для збереження значень змінних типу word виглядає так (табл. 6):

Таблицяв

Біти

15

14

13

12

11

10

9

8

7

6 1 5

4

3

2

1

0

1

0

0

1

0

0

1

1

1

0 0

1

0

0

1

1

У наведеному прикладі представлене десяткове число 37779. Максимально можливе десяткове число, що може бути описане типом word, дорівнює 65535, а мінімальне - 0.

Тип integer дає змогу використовувати як додатні, так і від'ємні числа (табл. 7).

Таблиця 7

Біти

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

1

0

0

1

0

0

1

1

1

0

0

1

0

0

1

1

У нашому прикладі дане число типу integer прочиталося б у десятковій системі числення як -27757.

Діапазон зміни значень типу integer можна визначити так. Для двійкового представления числа типу integer відведено 15 розрядів. Тобто максимальним числом, яке можна записати в ці розряди, е 1111111111111112 - 3276710. Отже, значения змінних типу integer можуть коливатися від -32768 до + 32767.

Чотирибайтові цілі числа, що в Pascal визначаються стан-дартним типом longint, виглядають на схемі аналогічно, але розташовуються в 32-х розрядах. Старший, 31-й, розряд відве-дено під знак числа, решту - під його двійкове представления. Максимальне двійкове число, яке складається з 31 одиниці, пе­реводиться в десяткову систему числення як 2147483647. За аналогією щодо міркувань у попередніх прикладах діапазон зміни значень даного типу є таким: -2147483648.. 2147483647.

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

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

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

Нагадаємо ситуацію, яка може трапитися з цілою змінною, що описана типом byte: якщо до 5Ї максимально припустимого значения 255 додати ще 1. Результатом буде 0. Пояснити це можна так.

Переведемо вказані десяткові числа в двійкову систему чис­ления: 25510 = 111111112; 25610 = 1000000002. Це означав, що найстарший біт двійкового зображення числа 256 не по-міщається в розрядну сітку змінної типу byte i його буде втра-чено. Залишиться 00000000, яке при переведенні до десяткової системи числення дасть значения 0.

Розглянемо випадок, коли маємо справу зі змінними типу integer. Втрата старших розрядів двійкового зображення числа призводить до зміни не тільки значения числа, a і його знака: якщо після втрати найстарших бітів, що не помістилися в роз­рядну сітку, значениям першого зліва біта буде 1, то значения числа буде зі знаком «-», якщо ж 0 - зі знаком «+».

Цей випадок можна спостерігати, коли обчислюємо значен­ия га! при великих п. Описуючи результат виконання даного об-числення як integer, ми можемо отримати правильне значения лише до л = 7 (л! = 5040), а типом longint до п = 12 (и! = = 479 001 600). При зростанні значень змінних, що виходять за вказані обмеження, значения результату буде незрозуміло мі-нятися: абсолютна величина його може зменшуватися, а знак ставати то «-», то «+». Наприклад, при описі var n: integer i значенні n = 8 результат n\ дорівнюватиме -25216 замість пра­вильно! відповіді 40320, а при описі var n: longint i значенні n = 13 результат n\ дорівнюватиме 1932053504 замість 6227020800.

Соседние файлы в папке Методи побудови алгоритмів та їх аналіз