VBA - AND逻辑运算符未按预期工作

时间:2018-02-15 01:32:35

标签: vba logic bitwise-operators

我只是运行了一些代码并遇到了意外错误,我意识到这是因为我的一个if语句在没有因为一个And运算符而应该运行时运行。

我的陈述:

If 3 And -6 then

此计算结果为true,而If执行(但不应该)。 3和-6最终来自其他Or和Not语句。

我去了另一张表,看看发生了什么

x = 3 And -6

返回x =" 2",在If语句中计算结果为True(但我希望它为假)。

如果我比较1 And -6或任何其他负数,它将按预期为假,但不会超过大于1的数字。

我在某处看到VBA的逻辑运算符是按位的(它不允许短路编程,让我感到很头疼),这是否与它有关并且有什么方法可以获得一个更经典的作品?

1 个答案:

答案 0 :(得分:2)

您误解了 AND 运算符。

当您对2个数字执行And操作时,它会有点明智 AND 。放入一个最简单的字节,它正在做它应该做的事情。

对于 3和-6 (3为二进制为0000 0011,-6为1000 0110):

0000 0011 (3)
1000 0110 (-6)
0000 0010 (AND result = 2)

1和-6

相同
0000 0001 (1)
1001 0110 (-6)
0000 0000 (AND result = 0, same value as False)

对于 If 条件,只有零(0)被视为False,其他任何内容都是True,因此这正是您所观察到的。您可以在即时窗口中通过?cint(true)?cint(false)验证这一点。