Операции - Макросы

Programming Far Manager plugins

Операции

Введение

Над значениями можно производить следующие операции:

Операция Описание
+ Числовое сложение или сцепление строк
- Числовое вычитание или унарный минус
* Числовое умножение
/ Числовое деление. FAR прерывает исполнение макроса, если происходит деление на 0
& Битовое умножение
^ Битовое Исключающее ИЛИ (XOR)
| Битовое сложение
<< Битовый сдвиг влево
>> Битовый сдвиг вправо
! Логическое отрицание
~ Битовое отрицание

Детальное описание

Для разбора операций определимся с определениями:

  • Int - целое число;
  • Dbl - вещественное число;
  • StrInt - строка, которая полностью преобразуется в Int;
  • StrDbl - строка, которая полностью преобразуется в Dbl;
  • Str - строка, которая не может быть полностью преобразована в Int или Dbl (собственно, просто набор символов).

В соответствии с этими определениями, там, где это возможно, происходит преобразование строки в число и выполнение операции.

Далее приведены таблицы, показывающие результаты работы операций над значениями A и B:

+B.IntB.DblB.StrIntB.StrDblB.Str
A.IntIntDblIntDblStr
A.DblDblDblDblDblStr
A.StrIntIntDblIntDblStr
A.StrDblDblDblDblDblStr
A.StrStrStrStrStrStr

Здесь Str обозначает конкатенацию двух операндов.

- * / %B.IntB.DblB.StrIntB.StrDblB.Str
A.IntIntDblIntDblA.Str
A.DblDblDblDblDblA.Str
A.StrIntIntDblIntDblA.Str
A.StrDblDblDblDblDblA.Str
A.StrA.StrA.StrA.StrA.StrA.Str

Здесь A.Str - возвращается значение операнда A.

Для бинарных операций операнды Dbl или StrDbl предварительно преобразуется к Int.

| & ^ << >>B.IntB.DblB.StrIntB.StrDblB.Str
A.IntIntIntIntIntA.Str
A.DblIntIntIntIntA.Str
A.StrIntIntIntIntIntA.Str
A.StrDblIntIntIntIntA.Str
A.StrA.StrA.StrA.StrA.StrA.Str

Здесь A.Str - возвращается значение операнда A.

В операциях сравнения (==, !=, <, <=, >, >=) операнды преобразуются (там, где это возможно) и сравниваются.

В логических OR и AND операнды сравниваются как есть, строки не преобразуются в StrInt и StrDbl, а проверяются на не пустую строку.

Приоритеты операций в выражениях

Операция Описание
! ~ - Унарные (R->L)
* / арифметические
+ - арифметические
<< >> Битовый сдвиг
< <= > => Логическое сравнение
== != Логическое сравнение
& Битовая (and)
^ Битовая (xor)
| Битовая (or)
&& Логическая (and)
^^ Логическая (xor)
|| Логическая (or)