Над значениями можно производить следующие операции:
| Операция | Описание |
|---|---|
| + | Числовое сложение или сцепление строк |
| - | Числовое вычитание или унарный минус |
| * | Числовое умножение |
| / | Числовое деление. 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) |