有人可以指导我如何在vba中快速理解这种逻辑。我目前正在调试代码,它包含使用AND操作数的条件,如下所示。
if (a and b) <> 0 then
do something
end if
a并为其分配数值,并且比较返回数值。我只是想知道如何使用和运算符来阅读这种逻辑。如果条件可能是if(a> 5且b <5),我很熟悉。
提前致谢。
答案 0 :(得分:3)
进行按位比较。如果a
和b
共享任何公共位,则(a and b) <> 0
将返回TRUE
例如,如果a
= 5
= 0101
且b
= 6
= 0110
,则a and b
= {{1 }} = 0100
答案 1 :(得分:0)
没有更多的代码,这似乎是两个设置的比较。
基于位的字段通常用于跟踪标志/设置。虽然数量有限(取决于架构中整数的大小),但它允许快速操作和测试。
所以,如果a
是0101
,它会持有几个标志(基于位的数字从右边开始)
Flag 1 (1st bit) = On
Flag 2 (2nd bit) = Off
Flag 3 (3rd bit) = On
Flag 4 (4th bit) = Off
假设您有另一个变量b
,它还包含标志
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
答案 2 :(得分:-2)
虽然a和b是数字,但由于“和”比较,它们被用作布尔值。如果数值为0,则它将转换为FALSE。否则,对于任何非零值,它将被视为TRUE
因此,只有当a和b都为非零时,上述条件才会被评估为TRUE。
您可以实际为布尔值分配一个数值来测试它,例如
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”作为结果。