VBA - AND 逻辑运算符未按预期工作
VBA - AND logical operator not working as expected
我只是 运行 一些代码并遇到了意外错误,我意识到这是因为我的一个 if 语句 运行 不应该是由于 And 运算符。
我的发言:
If 3 And -6 then
计算结果为 true 并且 If 执行(但它不应该)。 3 和 -6 最终来自其他 Or 和 Not 语句。
我去了另一个 sheet 看看发生了什么事
x = 3 And -6
这个 returns x = "2",它在 If 语句中的计算结果为真(但我希望它为假)。
如果我比较 1 And -6
或任何其他负数,它将如预期的那样为假,但对于大于 1 的数字则不然。
我在某处看到VBA的逻辑运算符是按位的(不允许短路编程,让我很头疼),这是否与它有关,有什么办法得到一个更经典的作品?
您只是误解了 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)
在立即 window.
中验证这一点
我只是 运行 一些代码并遇到了意外错误,我意识到这是因为我的一个 if 语句 运行 不应该是由于 And 运算符。
我的发言:
If 3 And -6 then
计算结果为 true 并且 If 执行(但它不应该)。 3 和 -6 最终来自其他 Or 和 Not 语句。
我去了另一个 sheet 看看发生了什么事
x = 3 And -6
这个 returns x = "2",它在 If 语句中的计算结果为真(但我希望它为假)。
如果我比较 1 And -6
或任何其他负数,它将如预期的那样为假,但对于大于 1 的数字则不然。
我在某处看到VBA的逻辑运算符是按位的(不允许短路编程,让我很头疼),这是否与它有关,有什么办法得到一个更经典的作品?
您只是误解了 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)
在立即 window.