运算(风飏@df32翻译版)

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

译者:风飏@df32open in new window

也可跳转至:原版

一般运算

算术运算

下面的5个算术运算符都是二项运算符。

  • +:数值的加法运算,以及字符串的连接运算。数值与字符串的相加会抛出错误。
  • -:数值的减法运算。
  • *:数值的乘法运算。字符串与数值相乘表示字符串的重复运算。
  • /:数值的整除运算。
  • %:数值的取余运算。

逻辑运算

以下逻辑运算符除!是单项运算符以外都是二项运算符。

  • !:逻辑非(NOT)
  • &&:逻辑和(AND)
  • ||:逻辑或(OR)
  • ^^:逻辑异或(XOR)
  • !&:逻辑与非(NAND)
  • !|:逻辑或非(NOR)

位运算

以下位运算符除~是单项运算符以外都是二项运算符。

  • ~:按位取反(NOT)
  • &:按位与(AND)
  • |:按位或(OR)
  • ^:按位异或(XOR)
  • <<:左移
  • >>:右移

比较运算

  • ==:相等判断
  • !=:不等判断
  • <:大于
  • >:小于
  • <=:小于等于
  • >=:大于等于

以上的比较运算既可以比较两个数值,也可以比较两个字符串。

三元判断运算

三元判断书写格式如下:

 <条件> ? <真值> # <假值>

当值为字符串时,需要额外添加\@~\@

 \@ <条件> ? <真值> # <假值> \@

对于赋值语句

 <数值变量> = <条件> ? <真值> # <假值>
 <字符串变量> = \@ <条件> ? <真值> # <假值> \@

等同于

IF <条件>
	<数值变量> = <真值>
	;或 <字符串变量> '= <真值>
ELSE
	<数值变量> = <假值>
	;或 <字符串变量> '= <假值>
ENDIF

赋值运算

数值赋值

 	A = 5
 	A = 1 + 2

文本赋值

 	STR = あいう
 	STR = %TSTR:0%いろは

另见使用FORM语法为字符串变量赋值

字符串赋值

 	STR '= "あいう"
 	STR '= TSTR:0 + "いろは"

另见使用字符串表达式为字符串变量赋值

赋值复合运算

  • ++ 自加运算
  • -- 自减运算
  • 算术运算
    • *= /= %=
    • += -=
  • 位移运算
    • <<= >>=
  • 位运算
    • &= |= ^=

运算顺序

类型优先级赋值复合运算符号
否定运算符false~, !
算术运算符true*, /, %
true+, -
位移运算符true<<, >>
比较运算符false<, >, <=, >=
false==, !=
逻辑运算符true&, `
false&&, !&, `
三元判断运算符false~?…#_

Emuera增加的运算

  • ==:字符串与字符串的比较。你不能将数字与字符串进行比较。
  • !=:字符串与字符串的比较。
  • <:字符串与字符串的比较。比较从一开始就进行,当发现不同的字符时就会确定。
  • >:字符串与字符串的比较。
  • <=:字符串与字符串的比较。
  • >=:字符串与字符串的比较。
  • +:字符串与字符串的连接。 数字和字符串不能被添加或连接。
  • *:字符串和整数的乘法。 不能将一个字符串乘以一个字符串。

逻辑运算符的短路评估

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

许多编程语言都包含这一机制。

这一机制使我们可以写出:

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

如果ASSI小于或等于0,总表达式必定为否定,因此NO:ASSI == 1不会被计算,也就不会产生可能的错误。

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

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

如果这样书写,则会首先计算NO:ASSI == 1。此时如果ASSI小于0,则会导致错误。