Преобразованя типов и действия над ними
И, наконец, об операциях отношения и логических операциях.
Над данными типа REAL, INTEGER, CHAR, STRING определены следующие операции отношения (сравнения):
- = – равно;
- <> – не равно;
- < – меньше;
- > – больше;
- <= – меньше или равно,
- >= – больше или равно.
В операциях сравнения должны участвовать однотипные операнды. Исключение сделано опять-таки в отношении REAL и INTEGER, которые могут сравниваться друг с другом. Результат применения операции отношения к любым операндам имеет тип BOOLEAN.
Сравнение двух строк осуществляется следующим образом. Символы строк сравниваются попарно друг с другом так, что первый символ первой строки сравнивается с первым символом второй строки, второй символ первой строки – со вторым символом второй и т.д. Символы сравниваются путем сравнения их кодов во внутреннем представлении (см. гл. 4). Если одна строка короче другой, недостающие символы заменяются нулем. Отношение первой несовпадающей друг с другом пары символов и принимается за отношение двух строк.
При сравнении данных типа BOOLEAN учитывается внутреннее соглашение Турбо Паскаля, в соответствии с которым FALSE есть нулевой байт, a TRUE – байт с единицей в младшем разряде. Заметим, что функция ORD преобразует к целому не только символы, но и логические величины, поэтому:
ord(false) = 0, ord(true) = 1.
В Турбо Паскале определены следующие логические операции:
- not – логическое НЕ;
- or – логическое ИЛИ;
- and – логическое И;
- хоr – исключающее ИЛИ.
Логические операции применимы к операндам целого и логического типов. Если операнды – целые числа, то результат логической операции есть тоже целое число (подробнее об этом сказано в гл.4). Логические операции над логическими данными дают результат логического типа.
При вычислении выражений любого типа приоритет вычислений определяется расставленными скобками, а при их отсутствии – по табл. 2.1 (в порядке убывания приоритета).
Таблица 2.1. Приоритет операций.
Приоритет | Операция |
---|---|
1 | not, @ |
2 | *, /, div, mod, and, shl, shr |
3 | +, -, or, xor |
4 | =, <>, >, >=, <, <=, in |
Примечание
Операции @ (получение адреса), shl (сдвиг влево), shr (сдвиг вправо) и in (принадлежность к множеству) описаны в гл.4.
Следует учесть, что в отличие от многих других языков программирования в Турбо Паскале логические операции имеют более высокий приоритет, чем операции отношения. В связи с этим, в сложных логических выражениях обычно необходимо расставлять скобки. Если, например, b и с имеют тип INTEGER, то выражение:
а = b and с < d
Вызовет сообщение о синтаксической ошибке, так как сначала выполнится операция b and с. Правильным будет выражение:
(а = b) and (с < d)