VB6中布尔值False和True的整数值是多少?

VB6中布尔值False和True的整数值是多少?,vb6,Vb6,我正在使用一些旧的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。任何非零值都视为真 要了解其原因,请在VB6中选中-,True的数值为-1False的数值为0。 这是因为布尔

我正在使用一些旧的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。任何非零值都视为真


要了解其原因,请在VB6中选中-

True
的数值为-1
False
的数值为0。


这是因为
布尔值
数据类型存储为16位有符号整数。因此,
-1的二进制计算结果为16 1s(1111)<代码>False为16 0s(0000000000000000)。这产生了贯穿BASIC发展过程的关系:
True=notfalse

这不是一个真正的答案,但我只是随便看看,在即时窗口中键入了这个,结果如下:

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有任何“有趣”的变化。其余的都是真/假/假。)因此,根据经验,我认为比较是通过算术进行的,除非您使用CBool进行转换。为什么?我真的不能说…

真正的问题是,为什么原始代码不首先使用
布尔值?@Cody Gray,这的确是一个好问题。@Cody,@Brian如果代码真的很旧,它可能早于
布尔值
引入语言之前。VB4中引入了AFAICR
Boolean
。@MarkJ您所说的是真的,但自VB1以来,有名为
true
False
的常量可用,所以它只是坏代码。+1。还值得一提的是,VB6
Not
始终是算术运算符,没有单独的逻辑
Not
运算符。由于类型强制,您可以将
Not
作为逻辑运算符与布尔一起使用。原因将在“任何非零值都被视为true”中详细解释——为什么
?(55=True)
return
False
?问得好,我想知道答案-有人吗?我不是100%确定。。但在这种情况下,55不会转换为bool值,它可能会比较55和-1以返回false。如果您创建一个bool变量,并将55赋值给它,然后进行比较,结果将为true。任何非零值在强制转换为boolean(赋值,CBool)时都为true@oneday当
true
存储为
-1
时,因此
55=true
相当于
55=-1
,这是
False
谢谢。我不知道你能在窗口里做那种事。你的结果证实了另外两张海报所说的。在VB.NET中,无法像VB6那样使用即时窗口几乎每天都让我恼火。