Основной (стандартный) набор простых, т.е. определяющих тип только одного отдельного значения, типов таков:
- 61 -
1. Числовые типы:
короткое целое без знака — Byte (0..255);
короткое целое со знаком — ShortInt (-128..127);
целое без знака — Word (0..65535);
целое со знаком — Integer (-32768..32767);
длинное целое со знаком — LongInt (-2147483648..2147483647);
вещественное — Real (точность 11-12 знаков после запятой).
2. Логический тип — Boolean.
3. Символьный тип — Char.
4. Строковый тип — String, String[n].
5. Адресный тип (указатель) — Pointer.
6. Перечислимый тип.
7. Ограниченный тип (диапазон).
Все эти типы могут участвовать в определении сложных типов. Обращаем внимание на отсутствие типа ALPHA, встречающегося во многих реализациях Паскаля. Здесь его заменяет более универсальный и гибкий тип String. Список числовых типов может быть расширен за счет использования математического сопроцессора. Подробно они будут рассмотрены в гл. 9 «Математические возможности Турбо Паскаля».
Набор сложных типов, определяющих структуры из простых типов весьма широк:
1) массив — Array ... of ...;
2) множество — Set of ...;
3) файлы (3 вида) — Text, File, File of ... ;
4) запись — RECORD;
5) объект — OBJECT;
6) ссылка — ^БазовыйТип.
Кроме того, Турбо Паскаль вводит особый тип, называемый процедурным. Он не имеет отношения к данным и используется для организации работы процедур и функций. Файлы в системе типов Турбо Паскаля могут быть трех различных типов: текстовые (Text), обобщенные или бестиповые (File), и компонентные или типизированные (File of ...). Из них только последний является действительно сложным, т.е. составным из прочих типов. Типы Text и File предопределены в языке и включены в этот список больше для наглядности. Некоторой натяжкой является включение ссылок в список сложных типов. Вводится принципиально новый тип — объекты. С их включением язык Турбо Паскаль обрел возможности, присущие до этого только объектно-ориентированным языкам (C++, Smalltalk).
- 62 -
Сложные типы достаточно сложны, чтобы их можно было кратко рассмотреть по ходу введения в систему типов. Подробно мы их обсудим в разд. 4.2 и гл. 7, 11, 12, 13.
4.1. Простые типы языка
Без обсуждения простых стандартных типов невозможно переходить к подробному рассмотрению всех прочих элементов языка. Поэтому дадим им достаточно полные характеристики вместе с правилами записи значений разных типов. Кроме того, детально рассмотрим вводимые простые типы, с тем чтобы в дальнейшем уже лишь ссылаться на них.
4.1.1. Целочисленные типы
Обилие целочисленных типов позволяет эффективно использовать память ПЭВМ и более гибко вводить целочисленные переменные в программу. Целочисленные типы отличаются размером при хранении в памяти (Byte и ShortInt — 1 байт, Word и Integer — 2 байта, LongInt — 4 байта) и способом кодировки значений (с представлением знака или без него). Типы без знака переводят допустимый диапазон значений целиком в неотрицательную область.
Целочисленные значения записываются в программе привычным способом:
123 4 -5 -63333 +10000
Число должно быть записано без всяких преобразований. Будет ошибкой задать целое число следующим образом:
1Е+2 (в смысле 100), или 123.0
Знак «+» перед числом может опускаться. Турбо Паскаль разрешает записывать целые значения в шестнадцатеричном формате, используя префикс $:
$FF $9 $FFFFAB0D
Регистр букв A, B, ..., F значения не имеет. Разрешается непосредственно приписывать знак числа, если значения (со знаком или без) не превышают допустимый для данного типа диапазон: от -$80 до +$7F для типа ShortInt, и от -$8000 до +$7FFF для типа Integer. Отрицательные значения для переменных типа LongInt могут быть записаны аналогичным способом. Но здесь есть особенность. Для этого типа отрицательные значения могут записываться и как целые величины без знака. При этом запись отрицательных значений в
- 63 -
шестнадцатеричном формате должна соответствовать обратному отсчету от максимального для размера LongInt положительного числа. Например, число $FFFFFFFF (условное максимальное положительное значение, размещающееся в четырех байтах) трактуется как значение типа LongInt, равное -1. Число $FFFFFFFE (это $FFFFFFFF-l) будет соответствовать уже -2 и т.д. Следуя этой схеме, значение, например -65, в шестнадцатеричном формате для типа LongInt вычислится так: от числа $FFFFFFFF, соответствующего значению -1, нужно «вычесть» еще 64:
$FFFFFFFF - 64 = $FFFFFFFF - $40 = $FFFFFFBF.