Выражения и операции

// устарело и отсутствует в справке

Любое выражение имеет определенный тип и после вычисления возвращает некоторое значение. Простейшими выражениями являются переменные и константы. Более сложные выражения строятся из более простых с использованием операций, скобок, вызовов функций, индексов и приведений типов. Данные, к которым применяются операции, называются операндами.

В Pascal ABC имеются следующие операции: @, not, ^, *, /, div, mod, and, shl, shr, +, -, or, xor, in, =>, =, >, <, <>, <= и >=.

Арифметические операции

К арифметическим относятся бинарные операции + - * / для вещественных и целых чисел, бинарные операции div и mod для целых чисел и унарные операции + и - для вещественных и целых чисел. Выражение, имеющее числовой тип, называется арифметическим. Тип арифметического выражения определяется по следующему правилу: если все операнды целые и в выражении отсутствует операция деления /, то выражение имеет тип integer, в противном случае выражение имеет тип real. Например, если b имеет тип byte, c имеет тип 1..9, то b+c и -b имеют тип integer, а 2.0+b и 1/2 - тип real.

Логические операции

К логическим относятся бинарные операции and, or и xor, а также унарная операция not, имеющие операнды типа boolean и возвращающие значение типа boolean. Выражение, имеющее тип boolean, называется логическим.

Операции отношения

Операции отношения <, >, <=, >=, =, <> возвращают значение типа boolean и применяются к операндам целого, вещественного, символьного, логического и строкового типов, а также к типизированным указателям. Операции = и <> также применяются к операндам типа pointer, к операндам, являющихся объектами классов и к константе nil. При сравнении символа и строки символ преобразуется в строку длины 1.

Побитовые операции

Побитовые операции and, or, not, xor, shl, shr производят побитовые манипуляции с операндами целого типа. Для унарной операции not результат имеет тот же тип, что и операнд. Для остальных операций результат имеет тип integer. Например, если b имеет тип byte и b=1, то b shl 10=1024, а not b=254.

Строковые операции

Помимо операций отношения <, >, <=, >=, =, <>, к строковым и символьным операндам применима операция конкатенации (слияния) +. Ее результат имеет строковый тип. Например, 'a'+'b'='ab'.

Операция @

Операция @ применяется к переменной и возвращает ее адрес.

Операции с указателями

К типизированным указателям применима операция разыменования ^: если p является указателем на тип T, то p^ - элемент типа T, на который указывает p.

Операции с множествами

К множествам применимы операции + (объединение), - (разность) и * (пересечение):

var
  s1,s2,s: set of byte;
begin
  s1:=[1..4];
  s2:=[2..5];
  s:=s1+s2; // s=[1..5]
  s:=s1-s2; // s=[1]
  s:=s1*s2; // s=[2..4]

К множествам применимы также операции отношения = (равенство), <> (неравенство), <= (вложено) и >= (содержит):

var
  s1,s2,s: set of byte;
  b: boolean;
begin
  s1:=[1..4];
  s2:=[2..5];
  s:=[1,2]; 
  b:=s1=s2; // b=False
  b:=s2<>s; // b=True
  b:=s<=s2; // b=False
  b:=s1>=s; // b=True

Наконец, операция in определяет, принадлежит ли элемент множеству:

1 in [2..5] // False
3 in [2..5] // True

Приоритет операций

Приоритет определяет порядок выполнения операций в выражении. Первыми выполняются операции, имеющие высший приоритет. Операции, имеющие одинаковый приоритет, выполняются слева направо.

Таблица приоритетов операций

@, not, ^ 1 (наивысший)
*, /, div, mod, and, shl, shr 2
+, -, or, xor 3
=, <>, <, >, <=, >=, in, => 4 (низший)