Операторы и логика
Полный приоритет, арифметика, сравнения, булева логика (истинные правила короткого замыкания) и точные побитовые правила.
Каждое выражение в Numlex вычисляется одной строгой грамматикой операторов: единой
лестницей приоритетов для арифметики и логики, настоящими логическими значениями (без
приведения 1/0) и отдельными точными правилами для побитовой работы.
Эта страница — полный справочник операторов: приоритет от if/then/else до
постфиксных операторов, значение каждого оператора, точное место короткого замыкания
(&& при ложной левой части — и больше нигде) и таблица приоритетов
для точных целых, проверяемые сдвиги и поведение при переполнении.
Приоритет
От низшего к высшему:
if … then … else … (right-associative)
or / ||
and / &&
not / !
== !=
< <= > >=
+ − (left)
* × / ÷ (left; `of` after a percent or multiplier is this level)
^ (power, right)
unary + / −
primary (literals, parentheses, calls, % and x postfixes)
Операторы
| Оператор | Смысл | Примечания |
|---|---|---|
+ − | сложение / вычитание | в аддитивном контексте «чистый» процент справа — доля от накопленной левой части: 100 + 10% = 110 |
* × / ÷ | умножение / деление | 200 × 10% = 20, 200 / 10% = 2000 |
^ | степень | никогда не XOR (XOR — слово xor для целых) |
% (постфикс) | p% = p/100 | семантический «процент» в аддитивном контексте |
x (постфикс) | 1.5x = множитель 1.5 | распознаётся только если переменная x не активна |
of (инфикс, уровень *) | 15% of 490 = 73.5 | левая часть должна быть процентом или множителем (1.5x): 1.5x of 20 = 30, цепочки 10% of 20% of 50 = 1; 3 of 4 — ошибка. В процентных строках базис N% of E — остаток строки: 15% of 490 + 5 = 74.25 |
< <= > >= | сравнения | числовые; результат — логический |
== != | равенство / неравенство | логический результат |
and && | конъюнкция | && коротко замыкает только при ложной левой части: false && (1/0 > 0) = false; true && … и слово and всегда вычисляют правый операнд |
or || | дизъюнкция | не коротко замыкает: оба операнда вычисляются — false or (1/0 > 0) и false || (1/0 > 0) дают ошибку деления на ноль |
not ! | отрицание | префикс |
if a then b else c | условие | низший приоритет; ветки — полные выражения; else обязателен |
Подробнее о процентных и множительных формах — в процентах.
Логические значения — настоящий тип
true и false никогда не приводятся к 1/0. Смешение логического значения и числа
в одном операторе — ошибка.
Глифы против слов
- Глифы
&и|всегда побитовые: с логическими операндами это ошибка (false | (1/0 > 0)→ «Invalid expression»). - Только слова
and/orконтекстны: два целых делают их побитовыми, два логических — логическими.
Точные целые и побитовые операторы
Режим точных целых включают:
- Сильно: литералы
0x…/0b…/0o…, вызовыint(bin(oct(hex(, фразы… as|in <base>/… to base N, побитовые глифы&|<<>>и словоxor. Глифы считаются только когда в строке есть математическое содержимое —fish & chipsостаётся прозой. - Слабо: слово
and/or, когда обе стороны — целые.
Приоритет для целых, от низшего к высшему:
if/then/else → || → && → | / or → xor → & / and
→ comparisons == != < <= > >= → shifts << >> → + - → * / % → ^
→ unary → primaries
| Оператор | Смысл | Примечания |
|---|---|---|
& | побитовое И | |
| | побитовое ИЛИ | глиф всегда побитовый: логические операнды — ошибка (false | (1/0 > 0)) |
xor | побитовое исключающее ИЛИ (слово) | 6 xor 3 = 5 |
<< | сдвиг влево | сдвиг 0…63; переполнение — ошибка |
>> | сдвиг вправо | сдвиг 0…63; арифметический для отрицательных |
/ | целочисленное деление | результат — обычное число при наличии остатка |
% | остаток | |
^ | степень | показатель проверяется; отрицательный показатель даёт обычное число |
Все значения здесь — точные целые: 0x7FFFFFFFFFFFFFFF = 9223372036854775807.
Переполнение — видимая ошибка, никогда не «обёртка» и не тихо округлённое число. Деление с
остатком, отрицательный показатель и нецелые значения «выходят» за пределы точных целых,
поэтому ставьте явные скобки на границах.
Литеральные формы и базовые имена — в числах и системах счисления.
Связанные разделы
- Числа и системы счисления — литералы hex/binary/octal и фразы.
- Встроенные функции —
powразделяет контракт^. - Проценты — строгие фразовые шаблоны на этих операторах.