为什么(而不是1)评估as -2?我希望它能被计算为0。

发布于 2019-03-07 17:40:58
1不是True的整数表示,-1是。
Debug.Print CInt(True) 'prints -1
Debug.Print CInt(False) 'prints 0布尔运算符(Not、And、Or、XOr)在操作数为布尔值时表现为“逻辑运算符”。当他们不是,他们表现为“位运算符”,但事实是,他们总是按位。
整数值1转换为布尔值True,因为True被定义为Not False,这意味着任何非零值都是布尔True。但是,只有在将-1用于True时才会得到正确/预期的逻辑行为。
Integer由16位表示,所以1是这样的:
0000 0000 0000 0001这使得Not 1这样:
1111 1111 1111 1110符号位是开的,所以值是负值-修剪不重要的数字,然后得到:
10这是2的二进制表示。因此,Not 1是-2。
相反,-1将是:
1111 1111 1111 1111因此,Not -1是:
0000 0000 0000 0000https://stackoverflow.com/questions/55049440
复制相似问题