# 逻辑

逻辑块可以根据数学或逻辑表达式的条件执行不同的操作。

以下逻辑块根据条件结果执行操作。在值块或逻辑块中设置 [If] 或 [If Else] 条件。

- If
- If Else

以下逻辑块输出可用于条件的数值或逻辑值。

- Math
- 比较条件
- 逻辑条件
- Not

注：

- 当操作数的值出现以下情况之一时，该值为未定义:

- 通信错误 (变量质量 “差”)

- 访问超出界限的数组元素编号

- 除以零。

- 如果逻辑块包含未定义的值，则结果未定义。但是，当作为 [逻辑条件] 使用时，它仍然可以输出结果。

逻辑条件

## If

当 [If] 条件的计算结果为 true 时此块执行 [Do] 下的操作。

##### 块

##### 文本

'if(CONDITION){}'

注： 在脚本的执行过程中，如果 [If] 条件未被定义，将退出该块。

## If Else

当 [If] 条件的计算结果为 true 时，此块执行 [Do] 下的操作；当 [If] 条件的计算结果为 false 时，执行 [Else] 下的操作。

##### 块

##### 文本

'if(CONDITION){}else{}'

注： 在脚本的执行过程中，如果 [If] 条件未被定义，逻辑会跳过 [Do] 而执行 [Else] 操作。

## Math

此块是数学表达式。在左操作数 (X) 和右操作数 (Y) 中插入值块，然后选择运算符。

##### 块

##### 文本

'SOURCE1 * SOURCE2'

运算符 | 表达式 | 描述
+ | X + Y | 加
- | X - Y | 减
* | X * Y | 乘
/ | X / Y | 除
% | X % Y | 除法的余数
& | X & Y | 返回按位 AND 运算的结果。如果 X = 0110、Y= 1100，那么结果为 0100
| | X | Y | 返回按位 OR 运算的结果。如果 X = 0110、Y= 1100，那么结果为 1110
^ | X ^ Y | 返回按位 XOR 运算的结果。如果 X = 0110、Y= 1100，那么结果为 1010
<< | X << Y | 左移。系统会将 X 中的位左移 Y 位。系统会保留符号。
>> | X >> Y | 右移。系统会将 X 中的位右移 Y 位。系统会保留符号。
>>> | X >>> Y | 填零右移。系统会将 X 中的位右移 Y 位，并用 0 填充移出的左侧位，因此不会保留符号。

注：

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

注：

数学表达式结果包含小数点。

（示例1）
在以下情况下，如果 INT1 的值为101，则结果为10.1（.1不被舍去）。

##### 块

##### 文本

'INT1 / 10'

要舍去小数点，请使用 floor（向下取整）块。
（示例2）
在以下情况下，如果 INT1 的值为101，则结果为10。

##### 块

##### 文本

'$Math.floor((INT1 / 10))'

## 比较条件

此块为比较条件。在左操作数 (X) 和右操作数 (Y) 中插入一个值块，然后选择一个运算符。

##### 块

##### 文本

'CONDITION1 == CONDITION2'

运算符 | 描述 | 示例
<= | 如果 X 的值小于或等于 Y 的值，则返回 true。 | 如果 X = 7 和 Y = 33，则表达式 X <= Y 为 true。
>= | 如果 X 的值大于或等于 Y 的值，则返回 true。 | 如果 X = 32 和 Y = 10，则表达式 X >= Y 为 true。
< | 如果 X 的值小于 Y 的值，则返回 true。 | 如果 X = 7 和 Y = 38，则表达式 X < Y 为 true。
> | 如果 X 的值大于 Y 的值，则返回 true。 | 如果 X = 27 和 Y = 14，则表达式 X > Y 为 true。
!= | 如果 X 的值不等于 Y 的值，则返回 true。 | 如果 X = 7 和 Y = 33，则表达式 X != Y 为 true。
== | 如果 X 的值等于 Y 的值，则返回 true。 | 如果 X = 5 和 Y = 5，则表达式 X == Y 为 true。

## 逻辑条件

此块为逻辑条件。在左操作数 (X) 和右操作数 (Y) 中插入一个值块，然后选择一个运算符。

##### 块

##### 文本

'CONDITION1 && CONDITION2'

运算符 | 描述 | 示例
&& | 逻辑 AND 如果两者均为 true，则返回 true。 | 如果 X = true, Y = false，则表达式 X && Y 为 false。 注： 即使其中一个操作数的值可能是未定义的，但如果另一个操作数为假，产生的逻辑条件可以评估为假。请见下表。
X | Y | 结果
未定义 | 未定义 | 未定义
未定义 | true | 未定义
未定义 | false | false
true | 未定义 | 未定义
false | 未定义 | false
|| | 逻辑和 返回 true，除非两个输入均为 false。 | 如果 X = true, Y = false，则表达式 X || Y 为 true。 注： 即使其中一个操作数的值可能是未定义的，但如果另一个操作数为真，产生的逻辑条件可以评估为真。请见下表。
X | Y | 结果
未定义 | 未定义 | 未定义
未定义 | true | true
未定义 | false | 未定义
true | 未定义 | true
false | 未定义 | 未定义

## Not

该块执行逻辑否定或位否定。在操作数 (X) 中插入一个值块，然后选择一个运算符。

##### 块

##### 文本

'!SOURCE'

运算符 | 描述 | 示例
! | 逻辑 NOT 返回布尔值的倒数。 | 如果 X = false，则结果为 true。
˜ | 位非 返回每个位的逆值。 注：使用整数时，位表达式的位长度总是 32 位。 | 如果 X = 0011，那么结果为 1100。