Выражения
Выражение – синтаксическая единица языка, определяющая способ определения значения. Константное выражение – выражение из констант, вычисляется на стадии компиляции. В выражениях применяются:
- переменные,
- константы,
- функции,
- символы операций.
Применяемые далее термины:
В этой книге | Синонимы |
Символ операции | Оператор |
Оператор | Инструкция |
Базовый тип | Целевой тип |
В выражении операнды объединяются символами операций. В качестве операнда может использоваться и простое выражение. Например, в выражении (2+3)*(4+5) использованы два простых выражения, заключенных в скобки.
Арифметические операции
Определены унарные и бинарные операции. Унарные – это присвоение знака числа, – или +. Бинарные – это операции с двумя операндами. Определены бинарные операции:
Знаки операций | Операнды | |
Символьные | ||
+ - * / |
Сложение Вычитание Умножение Деление |
Целые или вещественные числа |
Буквенные | ||
div mod |
Целочисленное деление
Остаток от целочисленного деления |
Целые числа |
В действительности операция Mod выполняется по формуле:
I mod J=I-(I div J)*J.
Примеры использования буквенных операций.
7 div 2 = 3
7 mod 2 = 1
Строковые операции
Конкатенация. Осуществляется сцепление строк. Обозначается знаком +.
Пример: Str3:=Str1+Str2;
Если длина результирующей строки превышает максимально возможное значение, то не поместившиеся символы отбрасываются. Сообщения об ошибке нет. Пример. При Str1=’1234’ и Str2=’5678’ получим Str3=’12345678’.
Операции сравнения
Применяются для сравнения двух операндов. Результат всегда типа boolean. Формат употребления:
Op1 <операция сравнения> Op2
Op1, Op2 – операнды. Определены операции:
№ | Операция | Действие | Примечание |
= | Равно | ||
<> | Не равно | Менять символы местами и вставлять между ними разделители нельзя. | |
> | Больше чем | ||
< | Меньше чем | ||
>= | Больше чем или равно | Менять символы местами и вставлять между ними разделители нельзя. | |
<= | Меньше чем или равно | Менять символы местами и вставлять между ними разделители нельзя. |
Операнды могут иметь типы:
- Совместимые, возможны операции 1..6.
- Указатели, возможны операции 1 и 2.
- Строки, возможны операции 1..6.
- Множества, возможны операции 1, 5, 6.
Логические операции
Логические операции выполняются над переменными логического типа и над целыми числами. Для целых чисел операции выполняются поразрядно, отдельно с каждым битом. Определены операции:
Символ операции | Перевод |
not | отрицание (“НЕ”) |
or | логическое сложение (“ИЛИ”) |
and | логическое умножение (“И”) |
xor | сложение по модулю 2 (“исключающее ИЛИ”) |
shl | логический сдвиг влево |
shr | логический сдвиг вправо |
Операция not – отрицание (“НЕ”)
Символ операции – английское слово not (не).
Операция | Примечание |
not(true)=false | Для логических типов |
not(236)=19
236 = 11101100 |
Для целых чисел без знака. |
Операция or – логическое сложение (“ИЛИ”)
Символ операции – английское слово or (или).
Операция | Примечание | ||
A | B | C = A or B | Для логических типов |
False | False | False | |
False | True | True | |
True | False | True | |
True | True | True | |
145 or 25 = 153
145=1*128+0*64+0*32+1*16+0*8+0*4+0*2+1*1 =10010001 = |
Для целых чисел без знака. |
Операция and – логическое умножение (“И”)
Символ операции – английское слово and (и).
Операция | Примечание | ||
A | B | C = A and B | Для логических типов |
False | False | False | |
False | True | False | |
True | False | False | |
True | True | True | |
145 and 25 = 17
145=1*128+0*64+0*32+1*16+0*8+0*4+0*2+1*1 =10010001 = |
Для целых чисел без знака. |
Операция xor – исключающее “ИЛИ”
Символ операции – от английских слов exclusive or (исключающее или), exclusive or => xor. Операции выполняется по таким же правилам, что операции or с одним исключением. Это и определило имя операции. Часто для этой операции употребляется синоним – сложение по модулю 2. Причина этого – при сложении двоичных чисел бит результата без учета переноса из младшего разряда получается по правилам операции xor.
Операция | Примечание | ||
A | B | C = A xor B | Для логических типов |
False | False | False | |
False | True | True | |
True | False | True | |
True | True | False | |
145 xor 25 = 136
145=1*128+0*64+0*32+1*16+0*8+0*4+0*2+1*1 =10010001 = |
Для целых чисел без знака. |
Операция shl – логический сдвиг влево
Символ операции – сокращение от английских слов shift left (сдвиг влево). shift left => shl. Формат употребления:
<Операнд> shl(<размер сдвига>)
При выполнении операции со стороны младшего разряда вдвигаются биты 0, число которых равно параметру <размер сдвига>.
Все биты перемещаются влево. Левые биты выдвигаются из поля числа и теряются.
Операция | Примечание |
145 shl(2) = 68
145=1*128+0*64+0*32+1*16+0*8+0*4+0*2+1*1=10010001 = 1001000100 <=00 |
Для целых чисел без знака. |
На практике операция логического сдвига влево применяется для умножения целых чисел без знака на 2 в целой степени. Размер сдвига = степени 2. Например, при умножении на 8 размер сдвига = 3.
Операция shr – логический сдвиг вправо
Символ операции – сокращение от английских слов shift right (сдвиг вправо). shift right => shr. Формат употребления:
<Операнд> shr(<размер сдвига>)
При выполнении операции со стороны старшего разряда вдвигаются биты 0, число которых равно параметру <размер сдвига>.
Все биты перемещаются вправо. Правые биты выдвигаются из поля числа и теряются.
Операция | Примечание |
145 shr(3) = 18
145=1*128+0*64+0*32+1*16+0*8+0*4+0*2+1*1=10010001 = 000> 00010010001 |
Для целых чисел без знака. |
На практике операция логического сдвига вправо применяется для деления целых чисел без знака на 2 в целой степени. Размер сдвига равен степени 2. Например, при делении на 8 размер сдвига = 3.
Операции над указателями
Определены операции:
Операция | Действие | Примечание |
+ | Сложение | Один операнд может быть целым числом |
- | Вычитание | Результат не может быть отрицательным |
= | Равенство при сравнении | Результат Булевый |
<> | Неравенство при сравнении | |
^ | Разыименовывание | Получить данные из динамической памяти, на которые ссылается указатель. Знак ставится после имени указателя. |
@ | Получить адрес объекта ссылки Пример A:=@(B) | Возвращается адрес области памяти, начиная с которого размещено значение аргумента |
Операции над множествами
Основные операции
В примерах, приведенных ниже, результаты получены с использованием множеств M1, M2, M3 и констант A, B, C.
- M1 = [1, 2, 3, 6, 9]
- M2 = [1, 3, 8]
- M3 = [1, 2, 3]
- A=2, B=7, C=9
Операция | Пример | Результат | |
+ | Объединение | M4:=M1+M2; | Множество из элементов M1, M2. M4 = [1, 2, 3, 6, 8, 9] |
- | Вычитание | M5:=M1-M2; |
Множество из элементов первого, которых нет во втором.
M5 = [2, 6, 9] |
* | Пересечение | M6:=M1*M2; |
Множество из общих элементов.
M6= [1, 3] |
< | Подмножество | B1:=M1<M3; |
True, если M1 – подмножество M3.
B1 = False. |
> | Надмножество | B2:=M >M3; |
True, если M1 – надмножество M3.
B2 = True. |
<= | Подмножество | B1:=M1<=M3; |
True, если M1 – подмножество M3 или совпадает с M3.
B1 = False. |
>= | Надмножество | B2:=M =>M3; |
True, если M1 – надмножество M3 или совпадает с M3.
B2 = True. |
= | Равенство | B3:=M1=M2; |
True, если M1 идентично M2.
B3 = False. |
<> | Неравенство | B4:=M1<>M2; |
True, если M1 не идентично M2.
B4 = True. |
in | Принадлежность к множеству | B5:= A in M2; | True, если A имеется в M2. B5 = False. |
Процедуры для множеств
Процедура | Пример | Результат | |
Include | Добавить элемент | Include(M3, B) | Добавить элемент B в множество M3. M3 = [1, 2, 3, 7] |
Exclude | Удалить элемент | Exclude(M1, C) | Удалить элемент С из множества M1. M1 = [1, 2, 3, 7] |
Операции над классами
Операция | Назначение |
as | Сравнение классов |
is | Проверка типа класса |
Приоритеты операций
В выражениях операции выполняются с соблюдением установленных приоритетов. Старшим является приоритет 1. Операции с одинаковым приоритетом выполняются слева направо. Чтобы изменить приоритеты, нужно использовать круглые скобки.
№ | Список операций | Примечания |
Вычисления в ( ) | Сначала в самых внутренних | |
Функции | ||
Not @ + - | Унарные операции | |
* / div mod and
shl shr as |
Операции типа умножения | |
+ - or xor | Операции типа сложения | |
= <> < > <=
>= in is |
Операции типа сравнения |































