Cam*_*ron 6 vb6 language-design
在VB6中,强制True转换为整数会产生值-1.
为什么会这样?这背后的原因是什么?
在大多数其他编程语言(C/C++,Java,Perl,Python等)中,当强制转换为整数时,true变为1.在布尔代数中,值1用于表示true/on.为什么VB6采用不同的方式呢?
我确实看到了一个优雅的对称性,即按位 - 不是-1(True)将产生0(False),反之亦然(因为-1的表示是2的补码中的所有1 ),但我可以'想一想这个身份的任何实际好处.
顺便说一句,我只是出于好奇而问 - 当我第一次学习VB6时,这让我感到很奇怪,从那时起我一直在想.
你非常接近原因...... Eric Lippert 揭示了这个可怕而可怕的事实:
发生的事情是VBScript不符合逻辑.VBScript是按位的.所有所谓的逻辑运算符都适用于数字,而不是布尔值!不,和,或者,XOr,Eqv和Imp都将它们的参数转换为四字节整数,对整数中的每对位执行逻辑运算,并返回结果.如果True为-1且False为0则则一切正常,因为-1的所有位都打开,0的所有位都关闭.
(正如克里斯史密斯指出的那样,长期以来各种各样的BASIC都是如此......)
请注意,在VB.NET中,引入了逻辑运算符(即,仅对布尔数据类型进行操作的运算符),但是如果使用整数类型,现有运算符仍将很乐意执行按位运算.在C++和VB之间移动时,这经常是让我感到沮丧的根源......