和运营商在VBA
有人可以指导我如何快速了解vba中的逻辑。 我目前正在debugging一个代码,它包含如果条件使用AND操作符如下。
if (a and b) <> 0 then do something end if
a并将数值分配给它,比较返回一个数字值。 我只是想知道如何使用和运算符来读取这种逻辑。 如果条件可能是(a> 5和b <5),我很熟悉。
提前致谢。
它正在做一个按位比较。 如果a
和b
共享任何公共位(a and b) <> 0
将返回TRUE
例如,如果a
= 5
= 0101
且b
= 6
= 0110
则a and b
= 0100
= 4
没有更多的代码,这似乎是两个设置的比较。
基于位的字段通常用于跟踪标志/设置。 尽pipe数量有限(取决于架构中整数的大小),但它允许快速操作和testing。
所以,如果a
是0101
,它将包含几个标志(基于位的数字从右侧开始)
Flag 1 (1st bit) = On Flag 2 (2nd bit) = Off Flag 3 (3rd bit) = On Flag 4 (4th bit) = Off
假设你有另一个variablesb
,它们也包含标志
Flag 1 (1st bit) = Off (different than a) Flag 2 (2nd bit) = Off Flag 3 (3rd bit) = On Flag 4 (4th bit) = On (different than a)
您可以使用按位运算快速比较它们:
if (a and b) = 0101 and 1100 = 0100 = common flags if (a or b) = 0101 or 1100 = 1101 = all flags across both variable
虽然a和b是数字的,但由于“和”的比较,它们被用作布尔值。 如果数字值为0,则它将被转换为FALSE。 否则,对于任何非零值,它将被视为TRUE
所以只有在a和b都不为零的情况下,上述条件才会被评估为TRUE。
你可以实际分配一个数值到一个布尔值来testing这个,例如
Sub test() Dim a As Integer Dim abool As Boolean a = 1 abool = a MsgBox ("a:" & a & " abool:" & abool) End Sub
在上面的例子中,你会得到“a:1 abool:True”的结果。