为什么visual basic中的-true变成1

int*_*syo 0 vba

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

Msgbox True
Output: True

Msgbox -True
Output: 1
Run Code Online (Sandbox Code Playgroud)

为什么会变成1?

Fun*_*mas 5

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

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

关于布尔值的Microsoft VBA 文档- 另请参阅vba 中的隐式类型转换规则是什么?

  • @intercretasyo 但实际上任何除“0”之外的数字都会产生“True”。测试“cBool(5)”或将“5”替换为“0”以外的任何数字,它将返回“True”。请注意,“True”将返回“-1”,但这不是定义。“True”的定义不是“0”。 (3认同)
  • @user692942:我知道,但我已经浪费了很多时间来寻找重复项,这是一件令人沮丧的事情。最合适的问题从来没有得到一个被接受的答案,一个合适的答案有一个稍微不同的焦点,搜索 SO 会给你数百次点击,你需要通过这些点击才能找到匹配 - 你能想到的。顺便说一句:现在用于关闭原因的答案显然是错误的链接,因为它指的是 VB.Net,而不是 VBA。 (3认同)
  • @user692942 是的,我知道。我只是太累了,在 20 万个问题中搜索最适合的方法,将一个问题标记为重复,而我可以在一分钟内回答它……我没想到这会得到任何赞成票,但似乎你花的时间越多在答案上花费的钱越少,获得声誉点的可能性就越小。 (2认同)