按位逻辑运算符
VBA 中的所有逻辑运算符都可以被认为是同名的按位运算符的覆盖。从技术上讲,它们总是被视为按位运算符。VBA 中的所有比较运算符都返回一个布尔值 ,它将始终没有设置其位(False
)或其所有位(True
)。但它会将任何位设置为 True
处理一个值。这意味着将表达式的按位结果转换为 Boolean
(参见比较运算符)的结果将始终与将其视为逻辑表达式相同。
使用这些运算符之一分配表达式的结果将给出按位结果。请注意,在下面的真值表中,0
相当于 False
而 1
相当于 True
。
And
如果双方的表达式都计算为 True
,则返回 True
。
左手操作数 | 右手操作数 | 结果 |
---|---|---|
0 |
0 | 0 |
0 |
1 | 0 |
1 |
0 | 0 |
1 |
1 | 1 |
Or
如果表达式的任一侧求值为 True
,则返回 True
。
左手操作数 | 右手操作数 | 结果 |
---|---|---|
0 |
0 | 0 |
0 |
1 | 1 |
1 |
0 | 1 |
1 |
1 | 1 |
Not
如果表达式求值为 False
则返回 True
,如果表达式求值为 True
则返回 False
。
右手操作数 | 结果 |
---|---|
0 |
1 |
1 |
0 |
Not
是唯一没有左手操作数的操作数。Visual Basic 编辑器将使用左手参数自动简化表达式。如果你输入……
Debug.Print x Not y
…… VBE 会将行改为:
Debug.Print Not x
类似的简化将对包含 Not
的左手操作数(包括表达式)的任何表达式进行。
Xor
也称为异或。如果两个表达式都评估不同的结果,则返回 True
。
左手操作数 | 右手操作数 | 结果 |
---|---|---|
0 |
0 | 0 |
0 |
1 | 1 |
1 |
0 | 1 |
1 |
1 | 0 |
请注意,虽然 Xor
运算符可以使用类似的逻辑运算,也绝对没有理由这样做,因为它给出了相同的结果比较操作 <>
。
Eqv
也称为等价。当两个表达式求值相同时,返回 True
。
左手操作数 | 右手操作数 | 结果 |
---|---|---|
0 |
0 | 1 |
0 |
1 | 0 |
1 |
0 | 0 |
1 |
1 | 1 |
需要注意的是 Eqv
功能非常很少使用,因为 x Eqv y
等同于更可读 Not (x Xor y)
。
Imp
也被称为暗示。如果两个操作数相同或第二个操作数是 True
,则返回 True
。
左手操作数 | 右手操作数 | 结果 |
---|---|---|
0 |
0 | 1 |
0 |
1 | 1 |
1 |
0 | 0 |
1 |
1 | 1 |
请注意,Imp
功能很少使用。一个好的经验法则是,如果你无法解释它的含义,你应该使用另一种结构。