运算(风飏@df32翻译版)
翻译自原文档:https://osdn.net/projects/emuera/wiki/exop
译者:风飏@df32
也可跳转至:原版
一般运算
算术运算
下面的5个算术运算符都是二项运算符。
+:数值的加法运算,以及字符串的连接运算。数值与字符串的相加会抛出错误。-:数值的减法运算。*:数值的乘法运算。字符串与数值相乘表示字符串的重复运算。/:数值的整除运算。%:数值的取余运算。
逻辑运算
以下逻辑运算符除!是单项运算符以外都是二项运算符。
!:逻辑非(NOT)&&:逻辑和(AND)||:逻辑或(OR)^^:逻辑异或(XOR)!&:逻辑与非(NAND)!|:逻辑或非(NOR)
位运算
以下位运算符除~是单项运算符以外都是二项运算符。
~:按位取反(NOT)&:按位与(AND)|:按位或(OR)^:按位异或(XOR)<<:左移>>:右移
比较运算
==:相等判断!=:不等判断<:大于>:小于<=:小于等于>=:大于等于
以上的比较运算既可以比较两个数值,也可以比较两个字符串。
三元判断运算
三元判断书写格式如下:
<条件> ? <真值> # <假值>
当值为字符串时,需要额外添加\@~\@:
\@ <条件> ? <真值> # <假值> \@
对于赋值语句
<数值变量> = <条件> ? <真值> # <假值>
<字符串变量> = \@ <条件> ? <真值> # <假值> \@
等同于
IF <条件>
<数值变量> = <真值>
;或 <字符串变量> '= <真值>
ELSE
<数值变量> = <假值>
;或 <字符串变量> '= <假值>
ENDIF
赋值运算
数值赋值
A = 5
A = 1 + 2
文本赋值
STR = あいう
STR = %TSTR:0%いろは
字符串赋值
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,则会导致错误。