Delphi中布尔类型辨析

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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:\test1.bin';

FName2 = 'c:\test2.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;

摘自《赛迪网》/文

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航