【问题标题】:What are the Integer values of Boolean False and True in VB6?VB6中布尔False和True的整数值是多少?
【发布时间】:2010-11-25 10:00:58
【问题描述】:

我正在使用一些旧的 VB6 代码...

Dim STATUS As Integer

STATUS = -1

If (Not STATUS) Then
' do something
Else
' do something else
End If

所以我很自然地想知道这段代码的哪个分支被执行了。那么有人知道VB6中True和False的数值是什么吗?

【问题讨论】:

  • 真正的问题是为什么原始代码首先不使用Boolean
  • @Cody Gray,这确实是一个好问题。
  • @Cody, @Brian 如果代码真的很旧,它可能早于Boolean 引入语言。 AFAICR Boolean 是在 VB4 中引入的。
  • @MarkJ 你说的是真的,但是从 VB1 开始就有名为 TrueFalse 的常量可用,所以它只是 IMO 的糟糕代码。

标签: vb6


【解决方案1】:

真存储为-1,假存储为0。任何非零值都被认为是真。

要了解为什么会这样,请查看 - http://www.vbforums.com/showthread.php?t=405047

【讨论】:

  • “任何非零值都被视为真”——为什么? (55 = True) 会返回False
  • 好问题,我想知道答案 - 有人吗?
  • 我不是 100% 确定 .. 但在这种情况下,55 不会转换为布尔值,它可能会将 55 和 -1 进行比较以返回 false。如果你创建一个 bool 变量并为其赋值 55 然后比较,结果将为 true。
  • 任何非零值都为真当转换为布尔值时(赋值,CBool​​)
  • @onedaywhen True 存储为-1 因此55 = True 等价于55 = -1False
【解决方案2】:

在 VB 6 中,True 的数值为 -1。 False 的数值为 0。

这是因为 Boolean 数据类型存储为 16 位有符号整数。因此,
-1 在二进制 (1111111111111111) 中计算为 16 个 1。 False 是 16 个 0 (0000000000000000)。这产生了贯穿 BASIC 演进的关系:True = Not False

【讨论】:

  • +1。还值得知道的是,VB6 Not 始终是算术运算符,没有单独的逻辑 Not 运算符。由于类型强制,您可以将 Not 与布尔值一起使用,就好像它是一个逻辑运算符一样。
  • 原因在this nice article from 2001中有更详细的解释
【解决方案3】:

不是真正的答案,只是随便打听,我在即时窗口中输入了这个,结果如下:

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​​ 进行投射。为什么?我真的不能说...

【讨论】:

  • 谢谢你。我不知道你可以在即时窗口中做那种事情。你的结果证实了其他两位发帖人所说的。
  • 在 VB.NET 中几乎每天都无法像 VB6 一样使用即时窗口。
猜你喜欢
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 2013-12-19
  • 2021-12-25
相关资源
最近更新 更多