按位逻辑运算符

VBA 中的所有逻辑运算符都可以被认为是同名的按位运算符的覆盖。从技术上讲,它们总是被视为按位运算符。VBA 中的所有比较运算符都返回一个布尔值 ,它将始终没有设置其位(False)或其所有位(True)。但它会将任何位设置为 True 处理一个值。这意味着将表达式的按位结果转换为 Boolean(参见比较运算符)的结果将始终与将其视为逻辑表达式相同。

使用这些运算符之一分配表达式的结果将给出按位结果。请注意,在下面的真值表中,0 相当于 False1 相当于 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 功能很少使用。一个好的经验法则是,如果你无法解释它的含义,你应该使用另一种结构。