vbscript - VBScript中的 boolean 非运算符

标签 vbscript boolean bit-manipulation

考虑以下两个条件,这些条件涉及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/

相关文章:

java - 我的应用程序中的 boolean 方法出错

ios - 使用 BOOL 替换冗长的代码

c++ - 用于按位操作的高性能库?

binary - 计算 Redshift 列中每个位位置中 '1' 值的数量

asp-classic - Server.CreateObject 的替代方案

excel 与使用第三方 COM ADD-IN 的 vbscript

vbscript - 用于检查文件大小是否比之前的检查有所增加的 VB 脚本

vbscript - 检查文件是否为空

c# - 将 char 数组/字符串转换为 bool 数组

java - 按位运算检查字符串是否唯一