和vba中的运算符

时间:2016-05-03 04:00:05

标签: excel vba excel-vba

有人可以指导我如何在vba中快速理解这种逻辑。我目前正在调试代码,它包含使用AND操作数的条件,如下所示。

if (a and b) <> 0 then
  do something
end if

a并为其分配数值,并且比较返回数值。我只是想知道如何使用和运算符来阅读这种逻辑。如果条件可能是if(a> 5且b <5),我很熟悉。

提前致谢。

3 个答案:

答案 0 :(得分:3)

进行按位比较。如果ab共享任何公共位,则(a and b) <> 0将返回TRUE

例如,如果a = 5 = 0101b = 6 = 0110,则a and b = {{1 }} = 0100

答案 1 :(得分:0)

没有更多的代码,这似乎是两个设置的比较。

基于位的字段通常用于跟踪标志/设置。虽然数量有限(取决于架构中整数的大小),但它允许快速操作和测试。

所以,如果a0101,它会持有几个标志(基于位的数字从右边开始)

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”作为结果。