Библиотека программиста

«Любой дурак может написать программу, которую поймет компилятор. Хорошие программисты пишут программы, которые смогут понять другие программисты»

Мартин Фаулер

Главная страница > Язык Object Pascal > 5. Типы данных

5. Типы данных

Типы данных можно классифицировать по следующим признакам или критериям:

Ø предопределенные (встроенные) типы (predefined, built-in) и определяемые (конструируемые) пользователем или описанные в Delphi;

Ø основные (fundamental) и родовые (generic). Основные типы одинаковы (имеют одинаковый диапазон значений и размер) во всех реализациях языка Object Pascal и не зависят от процессора и платформы. Большинство предопределенных типов являются основными, а небольшая часть целочисленных, символьных, строковых и указателей являются родовыми. Родовые типы целесообразно использовать везде, где только можно, так как они обеспечивают максимальную эффективность. Вместе с тем в другой реализации компилятора могут возникнуть проблемы совместимости;

Ø типы также можно классифицировать на простые, строковые, структурные, указатели, процедурные и вариантные (simple, string, structured, pointer, procedural, or variant). Кроме того, идентификатор типа также можно считать типом, так как он может фигурировать в качестве фактического параметра (High, Low, and SizeOf).

Классификация типов Object Pascal по последнему признаку такая:

– простые (simple)

– порядковые (ordinal)

– integer

– character

– Boolean

– enumerated

– subrange

– real

– string

– structured

– set

– array

– record

– file

– class

– class reference

– interface

– pointer

– procedural

– variant

– type identifier

Стандартная функция SizeOf применима ко всем типам и переменным и возвращает занимаемый ими объем памяти в байтах.

К любому порядковому типу применимы такие стандартные процедуры и функции: High, Low, Succ, Pred, Inc, Dec.

Из целочисленных типов родовыми (generic) являются Integer и Cardinal. Их рекомендуется применять в первую очередь.

Основными типами (fundamental) являются Shortint, Smallint, Longint, Int64, Byte, Word и Longword.

Родовые целочисленные типы для 32-битной реализации Object Pascal.

Тип

Диапазон

Формат

Integer

–2147483648..2147483647

знаковый, 32 бита

Cardinal

0..4294967295

беззнаковый, 32 бита

Основные целочисленные типы

Тип

Диапазон

Формат

Shortint

–128..127

знаковый, 8 бит

Smallint

–32768..32767

знаковый, 16 бит

Longint

–2147483648..2147483647

знаковый, 32 бита

Int64

–263 ..2 63 –1

знаковый, 64 бита

Byte

0..255

беззнаковый, 8 бит

Word

0..65535

беззнаковый, 16 бит

Longword

0..4294967295

беззнаковый, 32 бита

Арифметические операции над целочисленными данными возвращают значения типа Integer, которые в нынешней реализации соответствуют типу Longint. Значения типа Int64 возвращаются только в тех случаях, когда операнд имеет тип Int64. Например, следующий код даст некорректный результат (или ошибку при включенном контроле диапазона $R+)

var

I: Integer;

J: Int64;

. . .

I := High(Integer);

J := I + 1;

Для получения корректного результата надо сделать так:

J := Int64(I) + 1;

Большинство стандартных подпрограмм усекают тип Int64 до 32 бит. Тем не менее, функции High, Low, Succ, Pred, Inc, Dec, IntToStr и IntToHex полностью поддерживают аргументы типа Int64.

Основными символьными типами являются AnsiChar и WideChar. Тип AnsiChar является 8-битовым и представляет собой расширенный набор символов ANSI (extended ANSI character set). Тип WideChar является 16-битовым и соответствует символам Unicode (Unicode character set). Первые 256 символов Unicode соответствуют символам ANSI. Родовым типом является char, который эквивалентен AnsiChar. При использовании типа Char надо иметь в виду, что переход к типу Unicode не за горами и там, где это существенно, надо использовать функцию SizeOf для определения размера типа.

Стандартная функция Chr применима к AnsiChar и WideChar.

Предопределенных булевских типов четыре: Boolean, ByteBool, WordBool и LongBool. Предпочтительным является Boolean; другие типы введены для совместимости с другими языками и Windows.

Перечисляемый тип (enumerated) – интерпретируется так же, как и в BP. При выборе значений типа надо не забывать о возможности конфликта имен из-за множества идентификаторов, определенных в Delphi.

Тип–диапазон (Subrange) – интерпретируется так же, как и в BP. Использование константных выражений при определении типа может вызвать ошибку компилятора. Например, следующее описание вызовет ошибку компилятора:

const

X = 50;

Y = 10;

type

Scale = (X - Y) * 2..(X + Y) * 2;

Происходит она из-за того, что если после знака = следует открывающая круглая скобка, компилятор считает, что следует определение перечисляемого типа. Проблема может быть решена таким простым способом:

type

Scale = 2 * (X - Y)..(X + Y) * 2;

Вещественные (Real) типы. Характеристики основных (Fundamental) вещественных типов приведены в таблице.

Тип

Диапазон

Значащих цифр

Размер в байтах

Real48

2.9 х 10–39 .. 1.7 x 1038

11–12

6

Single

1.5 x 10 –45 .. 3.4 x 10 38

7–8

4

Double

5.0 x 10 –324 .. 1.7 x 10 308

15–16

8

Extended

3.6 x 10 –4951 .. 1.1 x 10 4932

19–20

10

Comp

–2 63 +1 .. 2 63 –1

19–20

8

Currency

–922337203685477.5808.. 922337203685477.5807

19–20

8

Родовым (generic) типом является Real, который в текущей реализации соответствует Double. В предыдущих версиях Object Pascal тип Real был 6-байтовым, а ныне для этой цели можно использовать тип Real48. Для возврата к 6-байтовой интерпретации типа Real можно воспользоваться директивой компилятора {$REALCOMPATIBILITY ON}.

Следующие замечания относятся к основным вещественным типам:

Real48

предназначен для обратной совместимости и, так как его формат не свойственен процессорам Intel, его использование неэффективно;

Extended

предпочтительнее всех других вещественных типов, но он менее совместим с другими платформами;

Comp

(computational) является «родным» (native) и представляется 64-битным целочисленным типом, хотя как таковой интерпретироваться не может. Он оставлен только для обратной совместимости и вместо него лучше использовать Int64;

Currency

является типом с фиксированной точкой (fixed-point) и предназначен для уменьшения ошибок округления в финансовых расчетах (monetary calculations). Он представляется как масштабированный 64-битный целочисленный тип с четырьмя младшими цифрами, которые представляют десятичные разряды неявным образом. При смешении с другими вещественными типами Currency автоматически умножается или делится на 10000.






<< Предыдущая статья
«4. Синтаксические элементы языка»
Следующая статья >>
6. Строковые типы данных
 
При использовании любых материалов с сайта http://www.introligator.org
обратная ссылка обязательна.
Rambler's Top100 Рейтинг@Mail.ru