运算符
twinBASIC语言内置的运算符。它们由编译器理解,不在运行时库中声明或定义。
算术
连接
- & -- 强制字符串连接,无论操作数类型如何
比较
位运算
两个操作数始终被求值。布尔值被视为整数:True = -1,False = 0。
逻辑短路
右操作数仅当左操作数不能确定结果时才被求值。
位移
(twinBASIC) 移位为逻辑移位 --- 空出位用零填充,超出操作数宽度的移位产生0而非循环。
对象同一性
复合赋值
(twinBASIC) 对于大多数算术、连接和位移运算符,twinBASIC提供了op=复合形式,将运算与赋值结合。x op= y等同于x = x op y,但左侧只求值一次,且是语句而非表达式。
| 运算符 | 复合形式 | 等同于 |
|---|---|---|
| + | += | x = x + y |
| - | -= | x = x - y |
| * | *= | x = x * y |
| / | /= | x = x / y |
| \ | \= | x = x \ y |
| ^ | ^= | x = x ^ y |
| & | &= | x = x & y |
| << | <<= | x = x << y |
| >> | >>= | x = x >> y |
Mod以及任何逻辑/比较运算符没有复合形式。
函数指针
- AddressOf -- 生成指向过程的有类型函数指针
运算符优先级
当表达式中出现多个运算时,各部分按固定顺序求值。算术运算符最先求值,比较运算符其次,逻辑运算符最后。括号可覆盖默认顺序。
各类别内从最高到最低优先级的顺序为:
| 算术 | 比较 | 逻辑 |
|---|---|---|
指数(^) | 等于(=) | Not |
一元取负(-) | 不等于(<>) | And、AndAlso |
乘法和除法(*、/) | 小于(<) | Or、OrElse |
整数除法(\) | 大于(>) | Xor |
取模(Mod) | 小于等于(<=) | Eqv |
加法和减法(+、-) | 大于等于(>=) | Imp |
字符串连接(&) | Like、Is、IsNot | |
位移(<<、>>) |
比较运算符具有相同的优先级,从左到右求值。乘法和除法同时出现时也从左到右求值,加法和减法同理。&运算符严格来说不是算术运算符,但在优先级上它排在所有算术运算符之后、所有比较运算符之前。
复合赋值运算符(+=、-=、*=、/=、^=、&=、<<=、>>=)仅出现在语句级别 --- 它们不属于任何表达式,因此不参与优先级排序。