运算

翻译自原文档:https://osdn.net/projects/emuera/wiki/exop

也可跳转至:风飏@df32翻译版

运算符

单项运算符

二元运算符

三元运算符

赋值运算符

递增运算符 & 递减运算符

临时的运算符优先权表格

类型优先级替换复合运算符号
负数运算符false~, !
算术运算符true*, /, %
true+, -
位移运算符true<<, >>
比较运算符false<, >, <=, >=
false==, !=
逻辑运算符true&, `
false&&, !&, `
三元运算符false~?…#_

添加的运算

  • ==:字符串与字符串的比较。你不能将数字与字符串进行比较。

  • !=:字符串与字符串的比较。

  • <:字符串与字符串的比较。比较从一开始就进行,当发现不同的字符时就会确定。

  • >:字符串与字符串的比较。

  • <=:字符串与字符串的比较。

  • >=:字符串与字符串的比较。

  • +:字符串与字符串的连接。 数字和字符串不能被添加或连接。

  • *:字符串和整数的乘法。 不能将一个字符串乘以一个字符串。

    STR:0 = % "啊" * 10 %
    PRINTFORML STR:0 = "%STR:0%"
    WAIT
    ;等价于
    STR:0 = "啊啊啊啊啊啊啊啊啊啊"
    

逻辑运算符的短路评估

短路评估是指,例如,如果X在表达式(X && Y)中为零,那么很明显,无论Y的值如何,操作的结果都是零,所以Y不被评估。

在许多语言中,包括 Kirikiri,逻辑运算符是短路的。

这种评价方法使我们可以写出:

IF (ASSI >= 0) && (NO:ASSI == 1)
  ~~~
ELSE 
  ~~~
ENDIF 

如果ASSI小于或等于0,NO:ASSI不被引用,因为总的结果是0,不管(NO:ASSI == 1)的结果如何。因此,不会产生错误。

评估的顺序是左项在先,右项殿后。

IF (NO:ASSI == 1) && (ASSI >= 0)

如果你这样写,它将首先尝试计算(NO:ASSI == 1),如果ASSI<0,将导致错误。