Целые типы

На верх  Назад  Вперёд

Список предопределенных целочисленных типов представлен в таблице (3.1).


Таблица 3.1: Предопределенные целочисленные типы

Имя

Integer

ShortInt

SmallInt

LongInt

LongWord

Int64

Byte

Word

Cardinal

QWord

Boolean

ByteBool

WordBool

LongBool

Char


Целочисленные типы, и их диапазоны и размеры, предопределены во Free Pascal, и перечислены в таблице (3.2). Пожалуйста, отметьте, что типы QWord и Int64 не истинно перечисляемые, таким образом, некоторые конструкции языка Pascal не будут работать с этими двумя целочисленными типами.


Таблица 3.2: Предопределенные целочисленные типы

Тип

Диапазон

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

Byte

0 .. 255

1

ShortInt

-128 .. 127

1

SmallInt

-32768 .. 32767

2

Word

0 .. 65535

2

Integer

или SmallInt или LongInt

2 или 4

Cardinal

LongWord

4

LongInt

-2147483648 .. 2147483647

4

LongWord

0 .. 4294967295

4

Int64

-9223372036854775808 .. 9223372036854775807

8

QWord

0 .. 18446744073709551615

8


По умолчанию во Free Pascal тип Integer соответствует типу SmallInt. И типу LongInt в любом из двух режимов Delphi или ObjFPC. Тип Cardinal сейчас всегда соответствует типу LongWord.

Замечание:

Все десятичные константы, которые не входят в диапазон -2147483648  .. 2147483647 начиная с версии 1.9.0, автоматически обрабатываются как 64-разрядные целые константы. Более ранние версии будут конвертировать их в вещественные типизированные константы.

Free Pascal делает автоматическое преобразование типов в выражениях, где используются различные виды целочисленных типов:

1.Каждая платформа имеет родной размер целого числа, в зависимости от того, платформа 8-бит, 16-бит, 32-бит или 64-бит. например, на AVR это 8-разрядная платформа.

2.Каждое целое число меньшее, родного размера повышается до базовой версии родного размера. Целые равные родному размеру сохраняют их разрядность.

3.Результат двоичных арифметических операций (+, –, * и т.д.), определяется следующим образом:

a.Если по крайней мере один из операндов больше, чем нативный (родной) размер целого, то результатом выбирается наименьший тип, который охватывает диапазон типов обоих операндов. Это означает, что смешивание типа без знака с меньшим или равным по размеру знакового типа, даст тип, который больше, чем оба из них.

b.Если оба операнда имеют один и тот же тип (размер), то результатом будет такой-же тип. Единственным исключением является вычитание (–): если один из типов без знаковой, операция вычитания даёт знаковый тип FPC (как и в Delphi, но не в TP7 ).

c.Смешивние знаковых и беззнаковых типов родного целого типа - даёт тип, больший по размеру, и со знаком. Это означает, что при смешивании типов LongInt и LongWord на 32-разрядных платформах будет производить Int64. Аналогично, при смешивании типа Byte и ShortInt на 8-разрядных платформах (AVR ), результатом будет тип SmallInt.