我在Eric Lippert 的博客上找到了我的问题的答案: Not Logical Is VBScript。事实证明,Not
操作符和它的兄弟们一样,实际上并不是一个布尔操作符。
And
, Or
,Not
和Xor
在 MSDN 上的逻辑运算符下归档。
但是 Eric Lippert 将它们标记为bitwise,这是一个比MSDN 上的逻辑更好的描述,因为逻辑并没有说明它们实际上是如何工作的,所以像我这样的人会误以为它们是布尔运算符,他们'不是。这是一个重大的陷阱。
为了让他们做我想做的事,我必须重写我的陈述如下:
If (1 And 3) > 0 Then WScript.Echo "yes" Else WScript.Echo "no"
If Not((1 And 3) > 0) Then WScript.Echo "yes" Else WScript.Echo "no"
这会打印yes
,然后no
按应有的方式打印。
更新:虽然上述方法似乎适用于这种情况,但这绝对不是要走的路。问题在于理解我想要检查的是什么。上面的代码没有说清楚。对结果进行大于 0 的按位比较和数值比较不等同于布尔检查。
考虑下面的代码,它采用了 Salman A 的CBool
建议作为这个问题的最终解决方案:
Option Explicit
Dim a, b
a = -3 : b = -2
If a And b Then WScript.Echo "ja" Else WScript.Echo "nein" ' bad
If (a And b) > 0 Then WScript.Echo "ja" Else WScript.Echo "nein" ' bad
If CBool(a And b) Then WScript.Echo "ja" Else WScript.Echo "nein" ' good