Совместимость и преобразование типов
Во многих выражениях в ТУРБО-ПАСКАЛЕ допускается использовать только совместимые типы. Два типа являются совместимыми если выполняется одно из следующих условий:
оба типа являются одинаковыми;
оба типа являются вещественными типами;
оба типа являются целочисленными типами;
оба типа являются отрезками одного и того же базового типа;
один тип является поддиапазоном другого;
оба типа являются множественными типами с совместными базовыми типами.
В случае нарушения совместимости типов компилятор выдает на экран сообщение “Type mismatch”.
Исключение сделано лишь для переменных и констант типа INTEGER (целые), которые разрешается использовать в выражениях типа REAL “вещественные”:
VAR
X : INTEGER;
Y : REAL;
begin
Y:=X+2;
В этом случае в правой части выражения стоит целочисленное выражение, которое автоматически преобразуется в вещественное. Однако оператор X:=2.0 будет неверным, так как нельзя автоматически преобразовать вещественное выражение к целому типу. Для этого необходимо использовать функции ROUND(X), которая округляет вещественное число X до ближайшего целого или функцию TRUNC(X), которая усекает вещественное число X путём отбрасывания дробной части.
Для преобразования символьных данных типа CHAR в целое число используется функция ORD(X). Обратное преобразование целого числа X типа INTEGER в символьный тип CHAR осуществляется функцией CHR(X).
Для преобразования числа X вещественного или целого типа в строку символов S используется процедура STR(X,S).
Обратное преобразование строки S во внутреннее представление целой или вещественной переменной X используется процедура VAL(S,X,CODE). Параметр CODE содержит 0, если преобразование выполнено успешно.
При вычислении выражения любого типа приоритет вычислений определяется расставленными скобками, а при их отсутствии в соответствии с табл.3.
Таблица 3
-
Приоритет
Операции
1
NOT
2
* , / , DIV, MOD , AND
3
+ , - , OR , XOR
4
= ,<> , < , > , <= , >=
Логические операции в ТУРБО-ПАСКАЛЕ имеют более высокий приоритет чем операции отношения. Поэтому в сложных логических выражениях обычно необходимо расставлять скобки. Если A, B, C: INTEGER , то выражение A=B AND A<C будет ошибочным. Правильно (A=B) AND (A<C).
