# 可用运算符和功能

使用数据、运算符、数学函数和数据类型转换创建表达式。

### 运算符

#### 整型运算符

请使用这些运算符执行简单的算术运算。使用它们计算数值，例如 "TankLevel + 60"。

操作员 | 表达式 | 描述
[+] | X + Y | 加
[-] | X - Y | 减
[*] | X * Y | 乘
[/] | X / Y | 除
[%] | X % Y | 除法的余数
[()] | (X + Y)*10 |

使用加运算符 (+) 可以连接字符串。换句话说，可以用+符号将字符串连接起来， "Hello " + " " + "Billy" 即变为字符串 "Hello Billy"。

#### 位运算符

操作员 | 表达式 | 描述
[>>] | X >> Y | 右移。系统会将 X 中的位右移 Y 位。系统会保留符号。
[<<] | X << Y | 左移。系统会将 X 中的位左移 Y 位。系统会保留符号。
[>>>] | X >>> Y | 填零右移。系统会将 X 中的位右移 Y 位，并用 0 填充移出的左侧位，因此不会保留符号。
[&] | X & Y | 返回按位 AND 运算的结果。 如果 X = 0110、Y= 0100，那么结果为 1100
[|] | X | Y | 返回按位 OR 运算的结果。 如果 X = 0110、Y= 1110，那么结果为 1100
[^] | X ^ Y | 返回按位 XOR 运算的结果。 如果 X = 0110、Y= 1010，那么结果为 1100
[~] | ~X | 将 X 的每一位进行取反运算。 如果 X = 0110，那么结果为 1001
[!] | !X | 当 X 不等于时，返回 True。

注：

- OR/AND/XOR/NOT总是返回32位无符整型值。
- 当输入值为负时，位移位表达式返回32位整型值。
- 当输入值为正数时，位移位表达式返回32位无符整型值。

#### 布尔型输出运算符

这些运算符会比较两个值。当定义的比较为 True 时，表达式会返回 True。当定义的比较为 False 时，表达式会返回 False。使用它们比较数值，例如 "TankLevel > 30"。

当值中出现以下情况之一时，结果为未定义。

- 通信错误 (变量质量 “差”)
- 访问超出界限的数组元素编号

- 除以零。

操作员 | 表达式 | 描述
- [&&] | X && Y | 逻辑 AND。 注： 转换器中的 BOOL 表达式必须计算为布尔值。如果表达式计算为任何其他的数据类型，那么该值则为未定义。 即使其中一个操作数的值可能是未定义的，但如果另一个操作数为假，产生的逻辑条件可以评估为假。请见下表。
  左运算符 | 右运算符 | 结果
  未定义 | 未定义 | 未定义
  未定义 | true | 未定义
  未定义 | false | false
  true | 未定义 | 未定义
  false | 未定义 | false
- [||] | X || Y | 逻辑 OR。 注： 转换器中的 BOOL 表达式必须计算为布尔值。如果表达式计算为任何其他的数据类型，那么该值则为未定义。 即使其中一个操作数的值可能是未定义的，但如果另一个操作数为真，产生的逻辑条件可以评估为真。请见下表。
  左运算符 | 右运算符 | 结果
  未定义 | 未定义 | 未定义
  未定义 | true | true
  未定义 | false | 未定义
  true | 未定义 | true
  false | 未定义 | 未定义
[==] | X == Y | 当 X 等于 Y 时，返回 True。
[!=] | X != Y | 当 X 不等于 Y 时，返回 True。
[<=] | X <= Y | 当 X 小于或等于 Y 时，返回 True。 注：此运算符不能用于 BOOL 变量、STRING 变量和 WSTRING 变量。
[>=] | X >= Y | 当 X 大于或等于 Y 时，返回 True。 注：此运算符不能用于 BOOL 变量、STRING 变量和 WSTRING 变量。
[<] | X < Y | 当 X 小于 Y 时，返回 True。 注：此运算符不能用于 BOOL 变量、STRING 变量和 WSTRING 变量。
[>] | X > Y | 当 X 大于 Y 时，返回 True。 注：此运算符不能用于 BOOL 变量、STRING 变量和 WSTRING 变量。

### Math

方法 | 描述
abs(a) | 返回绝对值。 参数：整型，返回：整型 -或- 参数：长整型，返回：长整型 -或- 参数：浮点型，返回：浮点型 -或- 参数：双精度型，返回：双精度型
acos(double a) | 返回反余弦值。 参数：双精度型，返回：双精度型
asin(double a) | 返回反正弦值。 参数：双精度型，返回：双精度型
atan(double a) | 返回反正切值。 参数：双精度型，返回：双精度型
atan2(double a, double b) | 返回 a/b 的反正切值。 参数 a：双精度型，参数 b：双精度型，返回：双精度型
ceil(double a) | 返回大于参数的最小整数。 参数：双精度型，返回：双精度型
cos(double a) | 返回余弦值。 参数：双精度型，返回：双精度型
E | 自然对数的底数。双精度浮点数值。2.71828182845904523545f 注：使用 Math.E 语法。
exp(double a) | 返回指数e (如 2.718...) 以某双精度值为次数自乘的乘积。 参数：双精度型，返回：双精度型
floor(double a) | 返回小于参数的最大整数。 参数：双精度型，返回：双精度型
IEEEremainder(double a, double b) | 返回参数 a 除以参数 b 后的余数。 参数 a：双精度型，参数 b：双精度型，返回：双精度型
log(double a) | 返回参数的自然对数。 参数：双精度型，返回：双精度型
max(a,b) | 返回 2 个参数中较大的那个。 参数 a: 整形, 参数 b: 整形, 返回: 整形 -或- 参数 a: 长整形, 参数 b: 长整形, 返回: 长整形 -或- 参数 a: 浮点型, 参数 b: 浮点型, 返回: 浮点型 -或- 参数 a: 双精度型, 参数 b: 双精度型, 返回: 双精度型
min(a,b) | 返回 2 个参数中较小的那个。 参数 a: 整形, 参数 b: 整形, 返回: 整形 -或- 参数 a: 长整形, 参数 b: 长整形, 返回: 长整形 -或- 参数 a: 浮点型, 参数 b: 浮点型, 返回: 浮点型 -或- 参数 a: 双精度型, 参数 b: 双精度型, 返回: 双精度型
PI | 圆的周长与其直径的比值。 3.14159265358979323846f 注： 使用 Math.PI 语法。
pow(double a, double b) | 返回 ab。 参数 a：双精度型，参数 b：双精度型，返回：双精度型
random() | 返回介于 0.0 和 1.0 之间的随机数。 参数：无，返回：双精度型 注： 此函数的输出是介于0和1之间的浮点数。
rint(double a) | 返回最接近参数的整数。 参数：双精度型，返回：双精度型
round(a) | 返回最接近双精度型参数的长整型，以及最接近浮点型参数的整型。 参数: 双精度型, 返回: 长整形 -或- 参数: 浮点型, 返回: 整形
sin(double a) | 返回参数的正弦值。 参数：双精度型，返回：双精度型
sqrt(double a) | 返回参数的平方根。 参数：双精度型，返回：双精度型
tan(double a) | 返回参数的正切值。 参数：双精度型，返回：双精度型

### 类型转换

使用类型转换来转换数据类型。下例是一个有效的表达式，其中LWORD变量转换为SINT变量：

类型 | 描述
(sint) | 返回四舍五入为 8 位有符整形的值。
(usint) | 返回四舍五入为 8 位无符整形的值。
(byte) | 返回四舍五入为 8 位无符整形的值。
(int) | 返回四舍五入为 16 位有符整形的值。
(uint) | 返回四舍五入为 16 位无符整形的值。
(word) | 返回四舍五入为 16 位无符整形的值。
(dint) | 返回四舍五入为 32 位有符整形的值。