Delphi中的布尔类型
2016-05-31 11:00
507 查看
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')
这四种类型的布尔值占用内存的数量如下:
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中的消息处理机制(三种消息处理方法的比较,如何截断消息)
- mydac 7.6.1.1 for delphi 10.1 berlin
- 解决Delphi的TAnimate控件的Common AVI在Vista以后版本中不能正常工作的问题
- delphi 设置开机自动启动函数
- Delphi创建开机启动项的方法示例
- Delphi中始终用WebBrowser打开网页
- Delphi自动适应屏幕分辨率的属性
- delphi禁止webbrowser弹出窗口或者脚本错误
- Delphi“尚未调用CoInitialize”解决方法
- Delphi 实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题
- Delphi 中的哈希表(1): THashedStringList
- Delphi中的THashedStringList对象
- Delphi日期函数大全
- 在Delphi开发的服务中调用指定应用程序
- Delphi的学习笔记十六——数据类型
- delphi显示hello world 和退出程序
- 打开Delphi 10.1 berlin提示脚本错误的解决方法
- Delphi日期函数大全
- Delphi ADOQuery连接数据库的查询、插入、删除、修改
- Delphi下生成Map文件方法