为啥这个 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(一些垃圾值)”
按位运算的意外结果为啥 (1 | 1 & 2) 给出 1 而不是 2?