我有一点旧VB6代码,从而去工作......VB6中布尔值为False和True的整数值是多少?
Dim STATUS As Integer
STATUS = -1
If (Not STATUS) Then
' do something
Else
' do something else
End If
所以我很自然,不知道这是执行该代码的分支。那么有谁知道True和False的数值在VB6中是什么?
我有一点旧VB6代码,从而去工作......VB6中布尔值为False和True的整数值是多少?
Dim STATUS As Integer
STATUS = -1
If (Not STATUS) Then
' do something
Else
' do something else
End If
所以我很自然,不知道这是执行该代码的分支。那么有谁知道True和False的数值在VB6中是什么?
将True存储为-1,将false存储为0.将任何非零值视为true。
,看看它为什么是这样请检查 - http://www.vbforums.com/showthread.php?t=405047
在VB 6,True
具有-1的数值。 False
的数值为0.
原因是因为Boolean
数据类型存储为16位有符号整数。因此,
-1计算为二进制的16 1s(1111111111111111)。 False
是16位(0000000000000000)。这产生了在BASIC的演变中持续的关系:True = Not False
。
不是一个真正的答案,但只是戳一下,我输入到这个即时窗口,与这些结果:
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。为什么?我真的不能说...
真正的问题是为什么原始代码不首先使用“布尔”? – 2010-11-25 10:09:48
@Cody Gray,这确实是个好问题。 – 2010-11-25 10:12:25
@Cody,@Brian如果代码真的很老,那么它可能早于将`Boolean`引入到语言中。 AFAICR布尔是在VB4中引入的。 – MarkJ 2010-11-25 11:58:37