为啥 Visual Basic 中的 -true 变为 1 [重复]

Posted

技术标签:

【中文标题】为啥 Visual Basic 中的 -true 变为 1 [重复]【英文标题】:Why -true in visual basic becomes 1 [duplicate]为什么 Visual Basic 中的 -true 变为 1 [重复] 【发布时间】:2021-04-16 10:35:39 【问题描述】:

我只是想了解为什么会发生以下情况:

Msgbox True
Output: True

Msgbox -True
Output: 1

为什么会变成1?

【问题讨论】:

这能回答你的问题吗? What are the Integer values of Boolean False and True in VB6? @user692942 VBA、VB6、VB.Net 和 VBScript 都是不同的。请不要添加 OP 不打算添加的标签。 @BigBen 谈到它们如何处理布尔值时,它们都是一样的。让我们明确一点,当他们添加 VBA 和 VBScript 时,OP 并不知道他们的意图。 @user692942 - 我同意这个问题由于包含 VBA 和 VBScript 标签而不清楚。但是,我认为应该要求 OP 进行澄清,而不是添加更多标签然后提出 VB6 和 VB.Net 欺骗目标,这 不是 原始标签。此外,我们也看到了关于 VB6、VBA、VBScript 和 VB.Net 的任何此类组合的问题......我们不要造成更多混乱。 【参考方案1】:

因为您强制 VBA 将布尔值隐式转换为数字。 True 在内部表示为 -1,因此将其转换为数字将导致 -1,而 -(-1)1False,顺便说一句,存储为 0,所以 -False 将打印 0

但是,您应该避免使用布尔值进行计算。如果你这样做,你很可能会走错路。布尔值可以是真或假,这就是您需要知道的全部。您应该使用的唯一方法是使用 ANDORNOT 的 Bool'sche Algebra

微软VBA documentation about Boolean - 另见What are the implicit type conversion rules in vba?

【讨论】:

@VBasic2008:你当然是对的。已更正。 值得一提的是,这仅适用于 VBA,其中 False ≙ 0True ≙ -1 但在 Excel 公式中是 False ≙ 0True ≙ 1(正而不是负 1)。所以实际上你在哪里only定义是False = 0,然后True被定义为Not False。如果您声明Dim b As Boolean 并设置b = 5,这将变为True,因此任何不是0 的东西都将被视为True。如果您想测试数字,那么不要测试 -11 以测试 True 测试 Not 0<> 0 并且您是安全的,因为这实际上是定义。 @intercretasyo 但实际上除0 之外的任何数字都会产生True。测试cBool(5) 或将5 替换为0 以外的任何数字,它将返回True。请注意,True 将返回 -1,但这不是定义。 True 的定义不是 0 @user692942 是的,我知道。当我能在一分钟内回答一个问题时,我已经厌倦了在 200k 问题中搜索最适合将问题标记为重复的问题......而且我没想到会得到任何支持,但似乎你的时间越多花费在答案上的可能性越小,获得任何声誉积分的可能性就越小。 @user692942: 我知道,但是我已经在 SO 上浪费了很多时间来寻找重复项,这是一件令人沮丧的事情。最合适的问题从未得到公认的答案,合适的答案的重点略有不同,搜索 SO 会为您提供 100 次点击,您需要通过这些点击才能找到匹配项 - 您可以命名。顺便说一句:现在用于关闭原因的答案显然是一个错误的链接,因为它指的是 VB.Net,而不是 VBA。

以上是关于为啥 Visual Basic 中的 -true 变为 1 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥Visual Studio这么垃圾?

如何计算Visual Basic中的用户输入?

从Visual Basic中的结构中的函数返回值

Visual Basic .NET 中消息框中的按钮

Visual Basic 中的校验和计算

Visual Basic 6 中的 ADODB 连接字符串