Тип данных
|
Количество
|
Диапазон
|
байтов
|
битов
|
shortint
byte
integer
word
longint
|
1
1
2
2
4
|
8
8
16
16
32
|
-128..127
0..255
-32768..32767
0..65535
-2147483648..2147483647
|
-27..27-1
0..28-1
-215..215-1
0..216-1
-231..231-1
|
Перечисляемые типы данных задаются в разделе type явным перечислением их элементов. Например:
type week =(sun,mon,tue,wed,thu,fri,sat)
0 1 2 3 4 5 6
Напомним, что для этого типа данных:
inc(sat) = sun, dec(sun) = sat.
Интервальные типы данных задаются только границами своего диапазона. Например:
type month = 1..12;
budni = mon..fri;
Программист может создавать и собственные типы данных, являющиеся комбинацией нескольких стандартных типов. Например:
type valid_for_identifiers = 'a'..'z','A'..'Z','_','0..9';
Этот тип состоит из объединения нескольких интервалов, причем в данном случае изменен порядок латинских букв: если в стандартном типе char 'A' < 'a', то здесь, наоборот, 'a' < 'A'. Для величин этого типа выполняются следующие равенства:
inc('z')='A'; dec('0')='_', pred('a')='9'; ord('b')= 2.
Вещественные типы данных
Напомним, что эти типы данных являются арифметическими, но не порядковыми.
Тип
|
Количество байтов
|
Диапазон (абсолютной величины)
|
single
real
double
extended
comp
|
4
6
8
10
8
|
1.5*10-45..3.4*1038
2.9*10-39..1.7*1038
5.0*10-324..1.7*10308
3.4*10-4932..1.1*104932
-263+1..263-1
|
Операции и выражения
Арифметические операции
Как мы уже упоминали, для каждого типа данных определены действия, применимые к его значениям. Например, если переменная относится к порядковому типу данных, то она может фигурировать в качестве аргумента стандартных функций ord(), pred() и succ() (см. п. "Совместимость типов данных" ниже). А к вещественным типам эти функции применить невозможно.
Итак, поговорим теперь об операциях - стандартных действиях, разрешенных для переменных того или иного базового типа данных. Основу будут составлять арифметические операции, но, конечно же, мы не забудем и о логическом типе данных (операции, определенные для значений символьного типа, будут подробно рассмотрены в лекции 5).
Замечание: Все перечисленные ниже операции (за исключением унарных '-' и not) требуют двух операндов.
Логические операции (and, or, not, xor) применимы только к значениям типа boolean. Их результатом также служат величины типа boolean. Приведем таблицы значений для этих операций:
not
|
and
|
true false or
|
true false xor
|
true false
|
true
false
|
false true
true false
|
true false true
false false false
|
true true true
true false false
|
false true
true false
|
Операции сравнения (=, <>, >, <, <=, >=) применимы ко всем базовым типам. Их результатами также являются значения типа boolean.
Операции целочисленной арифметики применимы, как легко догадаться, только к целым типам. Их результат - целое число, тип которого зависит от типов операндов.
a div b - деление а на b нацело (не нужно, наверное, напоминать, что деление на 0 запрещено, поэтому в таких случаях операция выдает ошибку). Результат будет принадлежать к типу данных, общему для тех типов, к которым принадлежат операнды. Например, (shortint div byte = integer). Пояснить это можно так: integer - это минимальный тип, подмножествами которого являются одновременно и byte, и shortint.
a mod b - взятие остатка при делении а на b нацело. Тип результата, как и в предыдущем случае, определяется типами операндов, а 0 является запрещенным значением для b. В отличие от математической операции mod, результатом которой всегда является неотрицательное число, знак результата "программистской" операции mod определяется знаком ее первого операнда. Таким образом, если в математике (-2 mod 5)=3, то у нас (-2 mod 5)= -2.
a shl k - сдвиг значения а на k битов влево (это эквивалентно умножению значения переменной а на 2k). Результат операции будет иметь тот же тип, что и первый ее операнд (а).
a shr k - сдвиг значения а на k битов вправо (это эквивалентно делению значения переменной а на 2k нацело). Результат операции будет иметь тот же тип, что и первый ее операнд (а).
and,or,not,xor - операции двоичной арифметики, работающие с битами двоичного представления целых чисел, по тем же правилам, что и соответствующие им логические операции.
Операции общей арифметики (+, -, *, /) применимы ко всем арифметическим типам. Их результат принадлежит к типу данных, общему для обоих операндов (исключение составляет только операция дробного деления /, результат которой всегда относится к вещественному типу данных).
Другие операции
Помимо арифметических, существуют и другие операции, специфичные для значений некоторых стандартных типов данных языка Pascal. Эти операции мы рассмотрим в соответствующих разделах:
#, in, +, *, [] : см. лекцию 5
@, ^ : см. лекцию 10
Достарыңызбен бөлісу: |