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