运算符与逻辑
完整优先级、算术、比较、布尔逻辑(真实的短路规则),以及精确的按位规则。
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。溢出是可见
错误——绝不是回绕,也绝不是静默舍入的数。带余数的除法、负指数和非整数值都会「超出」
精确整数范围,因此请在边界使用显式括号。
字面量形式和进制名称见数字与进制。