Skip to content

运算符

twinBASIC语言内置的运算符。它们由编译器理解,不在运行时库中声明或定义。

算术

  • + -- 加法;String操作数时为连接
  • - -- 减法;作为一元运算符时为取负
  • * -- 乘法
  • / -- 浮点除法
  • \ -- 整数除法(截断)
  • Mod -- 两数相除仅返回余数
  • ^ -- 指数运算

连接

  • & -- 强制字符串连接,无论操作数类型如何

比较

  • 比较运算符=<><<=>>=)-- 数值或字符串比较
  • Like -- 通配符/模式匹配比较
  • Is -- 比较两个对象引用是否相同
  • IsNot -- (twinBASIC) Is的逻辑反

位运算

两个操作数始终被求值。布尔值被视为整数:True = -1,False = 0。

  • And -- 按位与
  • Or -- 按位或
  • Not -- 按位取反
  • Xor -- 按位异或
  • Eqv -- 按位等价
  • Imp -- 按位蕴含

逻辑短路

右操作数仅当左操作数不能确定结果时才被求值。

  • AndAlso -- (twinBASIC) 短路与;仅当左操作数为True时才求值右操作数
  • OrElse -- (twinBASIC) 短路或;仅当左操作数为False时才求值右操作数

位移

(twinBASIC) 移位为逻辑移位 --- 空出位用零填充,超出操作数宽度的移位产生0而非循环。

  • << -- (twinBASIC) 将数值左移指定位数
  • >> -- (twinBASIC) 将数值右移指定位数

对象同一性

  • Is -- 比较两个对象引用是否相同
  • IsNot -- (twinBASIC) Is的逻辑反

复合赋值

(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
一元取负(-不等于(<>AndAndAlso
乘法和除法(*/小于(<OrOrElse
整数除法(\大于(>Xor
取模(Mod小于等于(<=Eqv
加法和减法(+-大于等于(>=Imp
字符串连接(&LikeIsIsNot
位移(<<>>

比较运算符具有相同的优先级,从左到右求值。乘法和除法同时出现时也从左到右求值,加法和减法同理。&运算符严格来说不是算术运算符,但在优先级上它排在所有算术运算符之后、所有比较运算符之前。

复合赋值运算符(+=-=*=/=^=&=<<=>>=)仅出现在语句级别 --- 它们不属于任何表达式,因此不参与优先级排序。

twinBASIC及其LOGO版权为作者"韦恩"所有