Delphi中的布尔类型


本文整理自网络,侵删。

 delphi中定义了四种布尔类型:boolean,bytebool,wordbool和longbool。后面三种布尔类型是为了与其他语言兼容而引入的,一般情况下建议使用boolean类型。

这四种类型的布尔值占用内存的数量如下:

boolean 1 byte

bytebool 1 byte

wordbool 2 bytes(1 word)

longbool 4 bytes(2 words)

对于bytebool,wordbool和longbool三种类型true常量的值为非零,false为零,可以用ord函数验证;

而对于boolean类型,true常量的值为1,false为零。在期望boolean值的上下文中,编译器会将bytebool,wordbool和longbool三种类型的非零值转换为true。

然而,在delphi中布尔表达式和integer/real是不兼容的。下面的表格对比了boolean与bytebool/wordbool/longbool在异同:


boolean



false < true

ord(false) = 0

ord(true) = 1

succ(false) = true

pred(true) = false

booltostr(true) = -1 //这个函数很变态

booltostr(false) = 0


bytebool, wordbool, longbool

false <> true

ord(false) = 0

ord(true) <> 0

succ(false) = true

pred(false) = true


booltostr这个函数最莫名其妙了,明明说true的值是1,而它却告诉我们true是-1。函数的原形是:

function booltostr(b: boolean; useboolstrs: boolean = false): string;

下面这个表是函数的转换规则:

b useboolstrs value of returned string

true false "-1"

true true trueboolstrs数组的第一个值(default, "true")

false false "0"

false true falseboolstrs数组的第一个值(default, "false")

相关阅读 >>

Delphi sqlite 自动编号的实现

Delphi 如何让 tgpimage 直接从流中加载图片?

Delphi中怎么取出字符串中单个char

Delphi中使用汇编(关于pos函数的问题)

Delphi ansi字符串转unicode编码

Delphi fmx 从app程序直接跳转到支付宝付款转帐页面

Delphi 如何解决在dll的入口函数中创建或结束线程时卡死

tmsweb core 组件居中显示

Delphi android 程序名称在哪里设置?

Delphi 让程序主窗口不响应“显示桌面”

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...