我只是运行了一些代码并遇到了意外错误,我意识到这是因为我的一个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的逻辑运算符是按位的(它不允许短路编程,让我感到很头疼),这是否与它有关并且有什么方法可以获得一个更经典的作品?
答案 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)
验证这一点。