| 添加到收藏夹 | 返回目录页 | 上一篇:Form产生时的事件次序; |
Delphi中布尔类型辨析
delphi中预定义的布尔类型有四种:boolean ,bytebool,wordbool,longbool。其中,boolean 类型是首选布尔类型,其余三种是为其它编程语言和windows 环境提供兼容性支持。这些布尔类型在使用上大同小异,但如果混淆使用将可能会有意外结果。现做简单辨析供大家参考。
一、从资源占用的角度进行比较
一项boolean 类型的数据占用 1字节的内存;
一项bytebool类型的数据占用 1字节的内存;
一项wordbool类型的数据占用 2字节的内存;
一项longbool类型的数据占用 4字节的内存。
如果开发者在进行程序设计时将构造一种含有布尔数据类型的结构类型,那么在资源占用方面将有所考虑。尽管这些数据类型之间是可以相互赋值的,但某些特殊情况下是有区别的。首先看下面的语句:
type
byteboolfile = file of bytebool;
longboolfile = file of longbool;
这里,如果在这两中类型文件中存储相同数量的布尔值,其文件大小是不同的。而对同一物理文件按照这两种类型文件分别读取数据,其结果更是相去甚远。
下面是比较bytebool和longbool的一段程序,得到的文件 test1.bin和 test2.bin的文件尺寸分别为 4字节和16字节。
procedure comparebyteboolwithlongbool;
const
fname1 = c: est1.bin;
fname2 = c: est2.bin;
type
byteboolfile = file of bytebool;
longboolfile = file of longbool;
var
bf: byteboolfile;
lf: longboolfile;
b: boolean;
begin
b := false;
assignfile(bf, fname1);
rewrite(bf);
write(bf, b, b, b, b);
closefile(bf);
assignfile(lf, fname2);
rewrite(lf);
write(lf, b, b, b, b);
closefile(lf);
end;
有兴趣的朋友可以在此基础上再比较一下读取数据的区别,你会有更奇特的发现。
二、从布尔值的操作角度进行比较
在delphi中,布尔值只能被赋予预定义的常量true和 false之一。上述四种布尔数据类型有如下关系:
boolean bytebool,wordbool,longbool
false < true false <> true
ord(false) = 0 ord(false) = 0
ord(true) = 1 ord(true) <> 0
succ(false) = true succ(false) = true
pred(true) = false pred(false) = true
不难看出,boolean 类型的有序的,而其它三种布尔数据类型是无序的。下面的程序给出了其中的部分区别:
procedure comparebooleanwithlongbool;
var
b: boolean;
lb: longbool;
begin
b := false;
lb := false;
if ord(b) = ord(lb) then
showmessage(ord(b) = ord(lb) [b = lb = false]) //将被执行
else
showmessage(ord(b) <> ord(lb) [b = lb = false]);
b := true;
lb := true;
if ord(b) = ord(lb) then
showmessage(ord(b) = ord(lb) [b = lb = true])
else
showmessage(ord(b) <> ord(lb) [b = lb = true]); //将被执行
showmessage(ord(b) = + inttostr(ord(b))); //一定是 1
showmessage(ord(lb) = + inttostr(ord(lb))); //可能是-1
end;
下一篇:AccesS密码的打击
↓相关文章:
- · AccesS密码的打击
- · Delphi嵌入式汇编一例
- · 在Delphi中实现任意形状的窗体
- · sql server 2005中的DDL触发器
- · asp.net 2.0下嵌套masterpage页的可视化编辑
- · PHP程序加速探索之缓存输出
- · 用C#代码编写的SN快速输入工具
- · (PHP)模板引擎Smarty介绍
- · 用PHP操纵Oracle的LOB类型的数据
- · C# 2.0中泛型编程初级入门教程
- · asp.net 2.0中加密web.config
- · ADO.NET操纵数据库
- · 关于asp.net c#中对cookie的操作
- · asp.net 2.0里当readonly遇上enableviewstate=false
- · C# 2.0与泛型
- · 让3721也无奈的弹出窗口(代码)
- · 玩透9种网页弹出窗口(精)
- · 网站左右两边浮动广告JS代码
- · 一个IP只提示一次设为首页的代码
- · 常用ASP脚本程序集锦*精(适合初学者)
- · 鼠标自动移动/点击
- · PHP程序加速探索之加速工具软件
- · SQLServer2000数据访问基类
- · 图解MySQL数据库的安装和操作
- · 一些ASP初学者常用的代码
- · ASP经典问答收藏之一
- · 一段防注入的通用脚本
- · 简单的防盗链(代码)
- · PHP窜红:革命尚未成功 Java仍需努力
- · 使用PHP编写基于Web的文件管理系统
- · 理解PHP中的MVC编程之控制器
- · 理解PHP中的MVC编程之MVC框架简介
- · SQL Server Express 数据库自动部署问题及解决
- · 用PHP文件上传的具体思路及实现
- · 回顾与展望PHP 5.0的变化与PHP 6.0展望
- · 一个产生中文累计数的代码片断
- · 在SQL Server 2005中解决死锁
- · 30分钟正则表达式指导
- · 不算不知道 44% 数据库开发者使用MySQL
- · 立即释放.net下的com组件
- · XHTML的目标,规则和细节
- · SQL Server 2005 提供的分页查询支持
- · ASP.NET程序中常用的三十三种代码
- · Sql server存储过程和C#分页类简化你的代码
- · SQL Server 2005新功能-TSQL
- · 在SQL Server 2005中编辑SQL Server 2000 DTS
- · .NET 连接到 Oracle的oci.dll加载错误解决方案
- · 如何在调用线程的时候传递参数
- · 专家预言:PHP将比Java更好更受欢迎
- · 在IIS6.0下ASP .NET 的版本冲突问题
- · 解决SqlTransaction用尽的问题(SQL处理超时)
- · 以前编写Like谓词被忽略的使用方法
- · 在编写存储过程时使用 Set NoCount On
- · ASP.NET 2.0运行时简要分析
- · .Net中如何操作IIS(原理篇)
- · 用.net开发不同操作系统下应用的winform的size大小问题
- · SQL Server数据库文件恢复技术
- · SQL SERVER中一些常见性能问题的总结
- · .NET下对二进制文件进行加密解密(C#)
- · 利用.NET的File控件上传文件的最终解决方案(个人版)

