Excel 评估返回值-1是否为真?(为什么不是1)
我正在帮助回答另一个问题,我意识到在VBA中使用Excel 评估返回值-1是否为真?(为什么不是1),excel,vba,Excel,Vba,我正在帮助回答另一个问题,我意识到在VBA中使用Evaluate似乎会为TRUE语句返回-1 数据: 因此,如果我把=INT(A2=B2)向下拖动,就会得到我期望的1,0,1 但是,使用下面的VBA,我得到-1,0,-1 For i = 2 To 4 Cells(i, 4).Value = Evaluate(Int(Cells(i, 1) = Cells(i, 2))) Next i 为什么求值使用-1表示真值?VBA使用-1表示真值。C和C++使用1。 -在2的补码有符号整数类型中,
Evaluate
似乎会为TRUE
语句返回-1
数据:
因此,如果我把=INT(A2=B2)
向下拖动,就会得到我期望的1,0,1
但是,使用下面的VBA,我得到-1,0,-1
For i = 2 To 4
Cells(i, 4).Value = Evaluate(Int(Cells(i, 1) = Cells(i, 2)))
Next i
为什么
求值使用-1
表示真值?VBA使用-1表示真值。C和C++使用1。
-在2的补码有符号整数类型中,1的所有位都设置为1,因此选择有一定意义
这种选择可以追溯到DOS BASIC(以及旧的BBC Micro上的其他基础),它早于20世纪90年代中期至今仍在使用的组件对象模型。在VBA中,1为真,0为假。请尝试:Debug.Print(-1=True)
和Debug.Print(0=False)
以查看我mean@RyanWildry哦,真奇怪!另外,在其他语言中,1
是True
。为什么VBA/Microsoft会改变这一点?我很惊讶1=True
返回False
。这只是一个猜测,但这可能是为了向后兼容。实际上,它只是“完成”了。要扩展上面的注释,在OLE自动化规范中将其指定为。由于VBA是一个COM beastie,并使用Variant
,它只是遵循规范。“在2的补码有符号整数类型中,-1的所有位都设置为1,因此选择有一定的意义。”-对不起,这对我来说只是jibberish,你介意用外行术语来描述像我这样的人吗?:)@dwirony:换句话说,-1是0的位求反。在VBA语言或其使用中,是否有任何东西暗示-1
为TRUE
?我只是好奇,因为如果我在其他地方使用了依赖于1=TRUE
的代码,我会等我的代码抛出一个错误来发现这个怪癖吗?@BruceWayne:你需要有一个扭曲的童年。启动此BBC Micro Emulator并键入PRINT TRUE
:
For i = 2 To 4
Cells(i, 4).Value = Evaluate(Int(Cells(i, 1) = Cells(i, 2)))
Next i