跳到主要内容

运算符

优先级从高到低排列。所有二元运算符都是左结合的:a - b - c 即 (a - b) - c。

级别运算符含义操作数类型
1( ) f(…)分组、内置函数调用
2! - ~(一元)逻辑非、取负、按位取反!:任意 · -:Integer/Real · ~:Integer
3* /乘、除Integer/Real
4+ -加或连接、减Integer/Real,或 Text + Text
5<< >>左移、算术右移Integer
6< <= > >=大小比较两个数字,或两个 Text
7== !=相等比较任意
8&按位与Integer
9^按位异或Integer
10|按位或Integer
11&&逻辑与(两侧总是都会求值)任意(按真值判断)
12||逻辑或(两侧总是都会求值)任意(按真值判断)

没有取模运算符(%)、乘方运算符、三元运算符(?:)或逗号运算符。

注意

&& 和 || 不会短路求值。两个操作数总是都会被求值,先左后右。即使左侧已经决定了结果,右侧的内置函数调用仍会运行;如果该调用失败,操作就会停止。请改用嵌套的 if 进行保护:

text = ClipboardGetText();
idx = StringGetIndexOf(text, ":");

// 错误:当 idx 为 -1 时,StringGetSubstring(text, -1, 5) 仍会运行并停止操作
// if (idx >= 0 && StringGetSubstring(text, idx, 5) == ":here") { ... }

// 正确:只有第一个测试成立时才会运行第二个测试
if (idx >= 0) {
if (StringGetSubstring(text, idx, 5) == ":here") UtilityPrint("found");
}
注意

按位运算符的优先级低于比较运算符(与 C 相同)。flags & 4 == 4 会被解读为 flags & (4 == 4),即 flags & true,结果为 0。请始终给掩码运算加上括号:(flags & 4) == 4 或 (flags & 4) != 0。

注意

比较不能链式书写。0 < x < 10 会被解读为 (0 < x) < 10,即将 Bool 与 Integer 比较,结果始终为 false。请写成 x > 0 && x < 10。