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ГБ.
Джерела
ред.- Delphi(англ.)
- PascalABC(рос.)
- Free Pascal(англ.)
- Turbo Pascal(рос.)