我正在处理一些旧的VB6代码,它是这样的...
Dim STATUS As Integer
STATUS = -1
If (Not STATUS) Then
' do something
Else
' do something else
End If
我自然而然地想知道这段代码的哪个分支被执行。所以,有人知道在VB6中True和False的数值是什么吗?
我正在处理一些旧的VB6代码,它是这样的...
Dim STATUS As Integer
STATUS = -1
If (Not STATUS) Then
' do something
Else
' do something else
End If
我自然而然地想知道这段代码的哪个分支被执行。所以,有人知道在VB6中True和False的数值是什么吗?
True被存储为-1,false被存储为0。任何非零值都被视为true。
要了解为什么,请查看 - http://www.vbforums.com/showthread.php?t=405047
? (55 = True)
返回 False
? - onedaywhenTrue
被存储为 -1
,因此 55 = True
等同于 55 = -1
,这是 False
。 - RolandTrue
具有数值-1。False
的数值为0。这是因为Boolean
数据类型存储为16位带符号整数。因此,-1在二进制下相当于16个1(1111111111111111)。而False
则对应16个0(0000000000000000)。自BASIC发展以来一直保持了这种关系:True = Not False
。请注意,HTML标签已被保留。Not
始终是算术运算符,没有单独的逻辑Not
运算符。由于类型强制转换,您可以像使用逻辑运算符一样在布尔型中使用Not
。 - MarkJ虽然不是一个确切的答案,但我尝试在立即窗口中输入了以下内容,并得到了以下结果:
For x = -5 To 5 : ? x, CBool(x), ( x = True ), ( x = False ) : Next x
-5 True False False
-4 True False False
-3 True False False
-2 True False False
-1 True True False
0 False False True
1 True False False
2 True False False
3 True False False
4 True False False
5 True False False
我测试了更多的值,但只有-1和0有一些“有趣”的结果。其他的结果都是True/False/False。
根据经验,我会说如果您不使用CBool进行类型转换,比较会被算术地执行。为什么?我无法给出确切的答案...