Операции
Введение
Над значениями можно производить следующие операции:
Операция | Описание |
---|---|
+ | Числовое сложение или сцепление строк |
- | Числовое вычитание или унарный минус |
* | Числовое умножение |
/ | Числовое деление. FAR прерывает исполнение макроса, если происходит деление на 0 |
& | Битовое умножение |
^ | Битовое Исключающее ИЛИ (XOR) |
| | Битовое сложение |
<< | Битовый сдвиг влево |
>> | Битовый сдвиг вправо |
! | Логическое отрицание |
~ | Битовое отрицание |
Детальное описание
Для разбора операций определимся с определениями:
Int
- целое число;Dbl
- вещественное число;StrInt
- строка, которая полностью преобразуется вInt
;StrDbl
- строка, которая полностью преобразуется вDbl
;Str
- строка, которая не может быть полностью преобразована вInt
илиDbl
(собственно, просто набор символов).
В соответствии с этими определениями, там, где это возможно, происходит преобразование строки в число и выполнение операции.
Далее приведены таблицы, показывающие результаты работы операций над значениями A и B:
+ | B.Int | B.Dbl | B.StrInt | B.StrDbl | B.Str |
---|---|---|---|---|---|
A.Int | Int | Dbl | Int | Dbl | Str |
A.Dbl | Dbl | Dbl | Dbl | Dbl | Str |
A.StrInt | Int | Dbl | Int | Dbl | Str |
A.StrDbl | Dbl | Dbl | Dbl | Dbl | Str |
A.Str | Str | Str | Str | Str | Str |
Здесь Str обозначает конкатенацию двух операндов.
- * / % | B.Int | B.Dbl | B.StrInt | B.StrDbl | B.Str |
---|---|---|---|---|---|
A.Int | Int | Dbl | Int | Dbl | A.Str |
A.Dbl | Dbl | Dbl | Dbl | Dbl | A.Str |
A.StrInt | Int | Dbl | Int | Dbl | A.Str |
A.StrDbl | Dbl | Dbl | Dbl | Dbl | A.Str |
A.Str | A.Str | A.Str | A.Str | A.Str | A.Str |
Здесь A.Str - возвращается значение операнда A.
Для бинарных операций операнды Dbl или StrDbl предварительно преобразуется к Int.
| & ^ << >> | B.Int | B.Dbl | B.StrInt | B.StrDbl | B.Str |
---|---|---|---|---|---|
A.Int | Int | Int | Int | Int | A.Str |
A.Dbl | Int | Int | Int | Int | A.Str |
A.StrInt | Int | Int | Int | Int | A.Str |
A.StrDbl | Int | Int | Int | Int | A.Str |
A.Str | A.Str | A.Str | A.Str | A.Str | A.Str |
Здесь A.Str - возвращается значение операнда A.
В операциях сравнения (==, !=, <, <=, >, >=) операнды преобразуются (там, где это возможно) и сравниваются.
В логических OR и AND операнды сравниваются как есть, строки не преобразуются в StrInt и StrDbl, а проверяются на не пустую строку.
Приоритеты операций в выражениях
Операция | Описание |
---|---|
! ~ - | Унарные (R->L) |
* / | арифметические |
+ - | арифметические |
<< >> | Битовый сдвиг |
< <= > => | Логическое сравнение |
== != | Логическое сравнение |
& | Битовая (and) |
^ | Битовая (xor) |
| | Битовая (or) |
&& | Логическая (and) |
^^ | Логическая (xor) |
|| | Логическая (or) |