为啥这个 VBA 代码给出 -25 而不是 25?

Posted

技术标签:

【中文标题】为啥这个 VBA 代码给出 -25 而不是 25?【英文标题】:Why does this VBA code give -25 and not 25?为什么这个 VBA 代码给出 -25 而不是 25? 【发布时间】:2020-12-30 21:43:28 【问题描述】:

这是我正在阅读的书中的一个 sn-p:

Sub VariantDemo()
  MyVar = True
  MyVar = MyVar * 100
  MyVar = MyVar / 4
  MyVar = "Answer: " & MyVar
  MsgBox MyVar
End Sub

在答案框中显示“答案:-25”?但为什么我们有减号?当我直接在Excel中计算值时,值为25。

【问题讨论】:

因为True = -1 不确定背景上下文是什么,但您使用 MyVar 存储布尔、整数和字符串类型值。如果在其他情况下使用它,我会避免这种情况 docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/… ***.com/questions/14462272/why-is-true-equal-to-1 谢谢,奇怪的是 Excel 和 VBA 对待 TRUE 的方式不同。 【参考方案1】:

在大多数其他语言的 VBA 中,False 的数值是 0,任何其他值都是 True。为方便起见,True 的值被转换为 -1 的有符号整数,因此在您的示例中为 -1*100/4 = -25

对于所有有符号整数,填充有1 位的值,例如11111111 等于-1。这是因为two's complement 最大化了第一位是符号位的类型的存储空间。

【讨论】:

以上是关于为啥这个 VBA 代码给出 -25 而不是 25?的主要内容,如果未能解决你的问题,请参考以下文章

为啥下面的代码块给出输出“ZZZ(一些垃圾值)”而不是“ZZ(一些垃圾值)”

当关闭文档是excel vba为啥宏代码自动消失

为啥打印 char* 会给出字符串而不是地址? [复制]

按位运算的意外结果为啥 (1 | 1 & 2) 给出 1 而不是 2?

我在excel中使用VBA宏程序时,报错无法执行,为啥!前提,程序没有问题,因为单位机器运行良好

为啥解包在 Python 中给出一个列表而不是一个元组?