为啥 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)
是 1
。 False
,顺便说一句,存储为 0,所以 -False
将打印 0
。
但是,您应该避免使用布尔值进行计算。如果你这样做,你很可能会走错路。布尔值可以是真或假,这就是您需要知道的全部。您应该使用的唯一方法是使用 AND
、OR
和 NOT
的 Bool'sche Algebra
微软VBA documentation about Boolean - 另见What are the implicit type conversion rules in vba?
【讨论】:
@VBasic2008:你当然是对的。已更正。 值得一提的是,这仅适用于 VBA,其中False ≙ 0
和 True ≙ -1
但在 Excel 公式中是 False ≙ 0
和 True ≙ 1
(正而不是负 1
)。所以实际上你在哪里only定义是False = 0
,然后True
被定义为Not False
。如果您声明Dim b As Boolean
并设置b = 5
,这将变为True
,因此任何不是0
的东西都将被视为True
。如果您想测试数字,那么不要测试 -1
或 1
以测试 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章