考虑以下两个条件,这些条件涉及VBScript中的按位比较:
If 1 And 3 Then WScript.Echo "yes" Else WScript.Echo "no"
If Not(1 And 3) Then WScript.Echo "yes" Else WScript.Echo "no"
我认为输出应为:
yes
no
但是实际输出是:
yes
yes
请稍等the
Not
operator is supposed to perform logical negation on an expression。据我所知,true
的逻辑取反是false
。我是否必须得出结论,这没有兑现这一 promise ?怎么以及为什么以及这里发生了什么?这样做的理由是什么?
最佳答案
如果两个操作数均为 boolean 值(True,False),则VBScript AND operator执行逻辑AND运算-有点像C(样式)语言 &&
运算符。
如果两个操作数都是数字,则它将执行按位与运算-有点像C语言 &
运算符。
如果操作数是混合类型,则 boolean 值将强制转换为数字-False = 0,True = -1(惊奇!),然后进行按位AND运算。
因此,您的示例评估如下:
' 1 And 3
' = &h0001 And &h0003 <- bitwise AND
' = 1
If 1 Then WScript.Echo "yes" Else WScript.Echo "no" ' Yes
' Not(1 And 3)
' = Not(1) <- see above
' = Not(&h0001) <- bitwise NOT
' = &hFFFE
If -2 Then WScript.Echo "yes" Else WScript.Echo "no" ' Yes
如果您想知道VBScript NOT operator的工作原理,它将对 boolean 操作数(如C语言
!
运算符)执行逻辑取反,并对数字操作数(如C语言 ~
运算符)进行按位补码。如果要对操作数强制执行逻辑运算,请使用VBScript CBool function强制转换操作数:
If Not(CBool(1) And CBool(3)) Then WScript.Echo "yes" Else WScript.Echo "no" ' no
注意:与大多数VBScript运算符一样,
Null
操作数使运算符返回Null
。在Null
构造中使用时,If
的行为异常。
关于vbscript - VBScript中的 boolean 非运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871895/