下面的VBS脚本,作为.vbs文件双击运行,会得到两个-1
- msgbox cint(true)
- msgbox vbTrue
复制代码下面的脚本,说明实际上True和-1是一回事
- i=-1
- if i = true then
- msgbox i
- end if
复制代码也就是说,实际上在VB和VBS里面,True=vbTrue=-1
但在VC里面,TRUE=1
实际上对于TRUE到底是1还是-1,语言本身并没有定义,只是VB和VC各自的习惯而已,因此推荐程序员在判断的时候直接用
而不是
补充一点:
说白了,这个问题的关键在于,按理说一个BOOL变量用一个bit来表示就足够了,但大多数情况下由于对齐等原因,通常都用一个byte甚至一个dword来表示。
那么就存在一个问题:一个byte里面有8个bit,false应该是8个bit全为0,而true呢?有两种选择,一种是让8个bit全为1,另一种是8个bit里面只有最低的bit为1。前者就相当于-1(补码),后者就相当于1。
两者哪个合理?可以说都有道理。所以也没有硬性的规定,只是VC的编译器按照习惯选择了后者,VB/VBS选择了前者而已。不排除其他C语言编译器也用-1来表示TRUE,所以如果程序要混合编程或者跨平台,就不能假设TRUE=-1或者TRUE=1