На физическом уровне над переменными интервального типа определены операции создания, уничтожения, выбора, обновления. Дополнительные операции определены базовым типом элементов интервального типа.
Таблица 4.1.
Базовый тип
Максимально допустимый диапазон
Размер требуемой памяти
ShortInt
-128..127
1 байт
Integer
-32768..32767
2 байта
LongInt
-2147483648..2147483647
4 байта
Byte
0..255
1 байт
Word
0..65535
2 байта
Char
chr(ord(0))..chr(ord(255))
1 байт
Boolean
False..True
1 байт
Примечание: запись chr(ord(0)) в таблице следует понимать как: символ с кодом 0.
А) Интервальный тип от символьного: определение кода символа и, наоборот, символа по его коду.
Пусть задана переменная типа tz:'d'..'h'. Данной переменной присвоено значение 'e'. Байт памяти отведенный под эту переменную будет хранить ASCII-код буквы 'e' т.е. 01100101 (в 10-ом представлении 101).
Б) Интервальный тип от перечислимого: определение порядкового номера идентификатора по его значению и, наоборот, по номеру идентификатора - его значение.
На логическом уровне все операции, разрешенные для данных базового типа, возможны и для данных соответствующих интервальных типов.
Символьный тип Char – один из основных типов – представлен двумя типами AnsiChar и WideChar. Переменные типа AnsiChar – занимают 1 байт памяти (8-бит) и позволяют использовать символы ANSI. Величины WideChar требуют 2 байта памяти (16-бит) и позволяют использовать символы набора Unicode. Первые 256 символов Unicode соответствуют символам ANSI. Тип Char эквивалентен AnsiChar.
Тип
Размер
Может хранить
ANSIChar
Один символ ANSI
WideChar
Один символ Unicode
Char
Эквивалентен ANSIChar (пока)
Константа типа string длиной 1, например, 'A', может обозначить символьную величину.
q Функция Chr(X: Byte): Char возвращает символьную величину для любого целого в диапазоне AnsiChar или WideChar; например, Chr(65) возвращают букву A.
q Функция Ord(X): Longint – возвращает порядковый номер символа в таблице ANSI или Unicode.
Пример 1. Вывести на экран таблицу символов и их коды.
Листинг 4.1. Расширенная таблица ANSI
var
i: byte;
begin
for i:=0 to $FF do Write(Chr(i),i:3,' ');
Readln;
end.
Значением символьного типа char являются символы из некоторого предопределенного множества. В большинстве современных персональных ЭВМ этим множеством является ASCII (American Standard Code for Information Intechange - американский стандартный код для обмена информацией). Это множество состоит из 256 разных символов, упорядоченных определенным образом и содержит символы заг- лавных и строчных букв, цифр и других символов, включая специальные управляющие символы. Допускается некоторые отклонения от стандарта ASCII, в частности, при наличии соответствующей системной поддержки это множество может содержать буквы русского алфавита. Порядковые номера ( кодировку) можно узнать в соответствующих разделах технических описаний.
Значение символьного типа char занимает в памяти 1 байт. Код от 0 до 255 в этом байте задает один из 256 возможных символов ASCII таблицы.
Например: символ "1" имеет ASCII код 49, следовательно машинное представление будет выглядеть следующим образом: 00110001.
ASCII, однако, не является единственно возможным множеством. Другим достаточно широко используемым множеством является код EBCDIC (Extended Binary Coded Decimal Interchange Code - расширенный двоично-кодированный десятичный код обмена), применяемый в системах IBM средней и большой мощности. В EBCDIC код символа также занимает один байт, но с иной кодировкой, чем в ASCII.
И ASCII, и EBCDIC включают в себя буквенные символы только латинского алфавита. Символы национальных алфавитов занимают "свободные места" в таблицах кодов и, таким образом, одна таблица может поддерживать только один национальный алфавит. Этот недостаток преодолен во множестве UNICODE, которое находит все большее распространение прежде всего в UNIX-ориентированных системах. В UNICODE каждый символ кодируется двумя байтами, что обеспечивает более 64 тыс. возможных кодовых комбинаций и дает возможность иметь единую таблицу кодов, включающую в себя все национальные алфавиты. UNICODE, безусловно, является перспективным, однако, повсеместный переход к двухбайтным кодам символов может вызвать необходимость переделки значительной части существующего программного обеспечения.
Специфические операции над символьными типами - только операции сравнения. При сравнении коды символов рассматриваются как целые числа без знака. Кодовые таблицы строятся так, что результаты сравнения подчиняются лексикографическим правилам: символы, занимающие в алфавите места с меньшими номерами, имеют меньшие коды, чем символы, занимающие места с большими номерами. В основном символьный тип данных используется как базовый для построения интегрированного типа "строка символов", рассматриваемого в 4.6.