• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[知识类问题] [知识点]true/Flase的返回值 [复制链接]

1#
下面的VBS脚本,作为.vbs文件双击运行,会得到两个-1
  1. msgbox cint(true)
  2. msgbox vbTrue
复制代码
下面的脚本,说明实际上True和-1是一回事
  1. i=-1
  2. if i = true then
  3. msgbox i
  4. end if
复制代码
也就是说,实际上在VB和VBS里面,True=vbTrue=-1
但在VC里面,TRUE=1
实际上对于TRUE到底是1还是-1,语言本身并没有定义,只是VB和VC各自的习惯而已,因此推荐程序员在判断的时候直接用
  1. If ISExit Then
复制代码
而不是
  1. If ISExit=-1 Then
复制代码
补充一点:
说白了,这个问题的关键在于,按理说一个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

发新话题 回复该主题