Pascal/Типи даних

Матеріал з Вікіпідручника

В цьому розділі наведена звідна таблиця типів даних в різних середовищах. Не варто вчити цю таблицю на пам'ять; втім, рекомендовано переглянути її, щоб зрозуміти, які можуть виникати проблеми при перенесені програму з одного компілятора до іншого. Наприклад, програма під PascalABC, що передбачає можливість роботи з зі значенянми integer до 100000, призведе до помилки в Turbo Pascal.

Дійсні типи[ред.]

Діапазон для дійсних типів (крім comp і currency) вказаний для додатних значень, від'ємні точно відповідають додатнім. Типи comp і currency, хоча й відносяться до дійсних, насправді кодуються як цілі (currency при цьому ділиться на 10000).

Тип Turbo Pascal Delphi Free Pascal Pascal ABC
Розмір Діапазон Кількість знаків Розмір Діапазон Кількість знаків Розмір Діапазон Кількість знаків Розмір Діапазон Кількість знаків
real 6 байт 2.9*10-39..1.7*1038 11-12 8 байт 5.0*10-324 .. 1.8*10308 15-16 як в single чи double 8 байт 5.0*10-324 .. 1.8*10308 15-16
real48 - 6 байт 2.9*10-39..1.7*1038 11-12 - -
single 4 байта 1.5*10-45 .. 3.4*1038 7-8 4 байта 1.5*10-45 .. 3.4*1038 7-8 4 байта 1.5*1038 .. 3.4*1038 7-8 4 байта 1.5*1038 .. 3.4*1038 7-8
double 8 байт 5.0*10-324 .. 1.8*10308 15-16 8 байт 5.0*10-324 .. 1.8*10308 15-16 8 байт 5.0*10-324 .. 1.8*10308 15-16 8 байт 5.0*10-324 .. 1.8*10308 15-16
extended 10 байт 1.9-4932..1.1*104932 19-20 як в extended з Turbo Pascal або real 10 байт 1.9-4932..1.1*104932 19-20 -
comp - 8 байт -263..263-1 19-20 8 байт -263..263-1 19-20 -
currency - 8 байт 19-20 8 байт 19-20 -

Логічні типи[ред.]

Тип boolean має внутрішнє представлення як в цілого числа зі значеннями 0 - false, 1 - true. Інші типи мають внутрішнє представлення 0 - false, інше значення - true.

Тип Діапазон Розмір
Turbo Pascal Delphi Free Pascal Pascal ABC
boolean false..true 1 байт
bytebool false..true - 1 байт -
wordbool false..true - 2 байти -
longbool false..true - 4 байти -

Символьні типи[ред.]

Символьні типи містять символи. Кодування менших 128 символів завжди ASCII, старших в 1-байтових змінних залежить від системи, в багатобайтових - юнікод.

Тип Turbo Pascal Delphi Free Pascal PascalABC
Розмір Діапазон Розмір Діапазон Розмір Діапазон Розмір Діапазон
char 1 байт #0..#255 2 байта #0..#$ffff (UTF-16) 1 байт #0..#255 1 байт #0..#255
ansichar - 1 байт #0..#255 1 байт #0..#255 -
widechar - 2 байта #0..#$ffff (UTF-16) 2 байта #0..#$ffff (UTF-16) -
ucs2char - 2 байта #0..#$ffff (UTF-16) 2 байта #0..#$ffff (UTF-16) -
ucs4char - 4 байта #0..#$ffffffff (UTF-32) 4 байта #0..#$ffffffff (UTF-32) -
unicodechar - - 2 байта #0..#$ffff (UTF-16) -

Рядкові типи[ред.]

Рядки зберігаються в Паскалі у вигляді масивів символів; типи string (і сумісний з ним shortstring) тримають в першому байті поточну довжину рядка; решта типів є, насправді, посиланнями на рядок в пам'яті, що закінчується нульовим символом, з певною додатковою інформацією. В деяких реалізаціях нульовий символ додається і до звичайного string.

Тип Turbo Pascal Delphi Free Pascal PascalABC PascalABC.NET
Максимальна довжина Розмір Максимальна довжина Розмір Максимальна довжина Розмір Максимальна довжина Розмір Максимальна довжина Розмір
string 255 літер 256 байт як в string[255] або unicodestring як в string[255] або ansistring 255 літер ? обмежено системою ?
string[довжина] довжина(до 255) довжина+1 байт довжина(до 255) довжина+1 байт довжина(до 255) довжина+2 байта довжина(до 255) ? довжина (до 256) ?
shortstring - до 255 літер довжина+1 байт до 255 літер довжина+2 байта - -
ansistring - обмежено системою довжина + 16(?) байт обмежено системою довжина + 17 байт - -
rawbytestring,
utf8string
- як в ansistring - - -
widestring - обмежено системою 2*довжина + ? байт обмежено системою 2*довжина + 17 байт - -
unicodestring - обмежено системою 2*довжина + 16(?) байт обмежено системою 2*довжина + 17 байт - -

"Обмежено системою" означає, що максимальна кількість літер в рядку залежить від системи, в якій виконується програма, а не від обмежень мови Паскаль. Зазвичай верхня межа - 2ГБ.

Джерела[ред.]

  1. Delphi(англ.)
  2. PascalABC(рос.)
  3. Free Pascal(англ.)
  4. Turbo Pascal(рос.)