# Logic

Logic 函数为 In-Sight 电子表格提供布尔代数和条件测试功能。所有按位函数都对参数的二进制表示中的每个位位置执行相应的逻辑运算，并以十进制形式返回结果二进制数。例如，Value0 的位 0 与 Value1 的位 0 进行比较，Value0 的位 1 与 Value1 的位 1 进行比较，等等。

提示:在将多个真/假条件的结果组合成 GUI 显示或离散输出时，按位函数对于 MultiStatus 函数特别有用。

运算符 | 符号
--- | ---
NOT | !
AND | &&
OR | ||
等于 | ==
不等于 | <> (或 !=)

对于所有逻辑函数：

- 假 = 0
- TRUE = 任何非零结果

注意:布尔函数会将引用空单元格或包含空字符串的单元格的任何参数视为 FALSE。引用任何非空字符串（甚至字符串“0”）的参数都被视为 TRUE。

函数 | 说明
And(Value1, Value2, ...) | 如果所有值都非零，则返回 1。（逻辑 AND 当两个值都为 TRUE 时，结果为 TRUE。） 示例： And(45, -77) 返回 1。 And(65534, 0) 返回 0。 And(-3, -2, -1, 1, 2, 3) 返回 1。 And(-1, 0, 1) 返回 0。
BitAnd(Value1, Value2, ...) | 返回值的按位与运算结果。 注意:处理并返回 32 位有符号整数值。 示例： BitAnd(45, 77) 返回 13。 45 = 0000 0000 0000 0000 0000 0000 0010 1101（二进制）， 77 = 0000 0000 0000 0000 0000 0000 0100 1101（二进制）。 使用与运算分别比较这两个 16 位二进制数中的每个公共位会得到 0000 0000 0000 0000 0000 0000 0000 1101，即十进制的 13。
BitNot(Value) | 返回值的按位取反运算结果。 注意:处理并返回 32 位有符号整数值。 示例： BitNot(45) 返回 -46。 45 = 0000 0000 0000 0000 0000 0000 0010 1101（二进制）。 将每个 0 反转为 1 且每个 1 反转为 0 会得到二进制的 1111 1111 1111 1111 1111 1111 1101 0010，即十进制的 -46。
BitOr(Value1, Value2, ...) | 返回值的按位或运算结果。 注意:处理并返回 32 位有符号整数值。 示例： BitOr(45, 77) 返回 109。 45 = 0000 0000 0000 0000 0000 0000 0010 1101（二进制）， 77 = 0000 0000 0000 0000 0000 0000 0100 1101（二进制）。 使用或运算分别比较这两个 16 位二进制数中的每个公共位会得到 0000 0000 0000 0000 0000 0000 0110 1101，即十进制的 109。
BitXor(Value1, Value2, ...) | 返回值的按位 XOR（异或）运算结果。（逻辑 XOR 如果一个位且仅有一个位为 TRUE，则结果为 TRUE。如果 2 个或更多位相等，则结果为 FALSE。） 注意:处理并返回 32 位有符号整数值。 示例： BitXor (45, 77) 返回 96。 45 = 0000 0000 0000 0000 0000 0000 0010 1101（二进制）， 77 = 0000 0000 0000 0000 0000 0000 0100 1101（二进制）。 0110 0000 是 45 到 77 之间唯一的非公共位，如下所示。
45 | 77 | 按位 XOR | XOR 位
0 | 0 | 两个 0 ≥ XOR FALSE | 0 (FALSE)
0 | 1 | 只有一个 1 ≥ XOR TRUE | 1 (TRUE)
1 | 0 | 只有一个 1 ≥ XOR TRUE | 1 (TRUE)
0 | 0 | 两个 0 ≥ XOR FALSE | 0 (FALSE)
1 | 1 | 两个 1 ≥ XOR FALSE | 0 (FALSE)
1 | 1 | 两个 1 ≥ XOR FALSE | 0 (FALSE)
0 | 0 | 两个 0 ≥ XOR FALSE | 0 (FALSE)
1 | 1 | 两个 0 ≥ XOR FALSE | 0 (FALSE)
0110 0000 = 96 十进制。
If(Cond, Value1, Value2) | 如果 Cond 非零，则返回 Value1；否则返回 Value2。 注意:如果条件或参数引用空单元格，它们将被解释为零 (FALSE)。
InRange(值, 开始, 结束) | 如果 Min(开始,结束) ≤ 值 ≤ Max(开始,结束)，则返回 TRUE。
InTolerance(Actual, Expected, Tolerance %, Margin) | 确定实际值是否在预期值的相对公差百分比内，以及实际值和预期值之间的差值是否超过界定的范围。 如果计算出的百分比差值大于公差百分比值或界定参数，则函数返回 0。否则，返回 1。计算值使用提供的预计值和实际值。
Not(Value) | 如果值为非零，则返回 0；如果值为 0，则返回 1。（逻辑取反） 示例： Not(-12345) 返回 0。 Not(3.14) 返回 0。 Not(2-1) 返回 0。 Not(1-1) 返回 1。
OneShot(值) | 如果最新输入值为真（非零）且先前输入值为假 (0)，则返回真 (1)。在所有其他情况下，该函数返回假 (0)。 示例： OneShot(A1) 指包含布尔函数的 A1 单元格。 第一次执行时，A1 单元格返回 0。OneShot(A1) 返回 0。 第二次执行时，A1 单元格返回 1。OneShot(A1) 返回 1。 OneShot(B2) 指 B2 包含返回更大范围值的函数的单元格。 第一次执行时，B2 单元格返回 12。OneShot(B2) 返回 1。 第二次执行时，B2 单元格返回 0。OneShot(B2) 返回 0。 注意:根据触发速度，OneShot 函数结果可能会非常快速脉冲执行。这可能意味着输出值不会在显示器中以可见的方式更新。
Or(Value1, Value2, ...) | 如果所有值都为零，则返回 0；否则返回 1。（逻辑或 如果任何值为 TRUE，则结果为 TRUE。) 示例： Or(45, -77) 返回 1。 Or(-1, 0, 1) 返回 1。 Or(0, 1-1) 返回 0。