Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 评估返回值-1是否为真?(为什么不是1)_Excel_Vba - Fatal编程技术网

Excel 评估返回值-1是否为真?(为什么不是1)

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的补码有符号整数类型中,

我正在帮助回答另一个问题,我意识到在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的补码有符号整数类型中,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