Delphi中布尔类型辨析

原创 2001年01月11日 08:54:00
Delphi中布尔类型辨析
苏涌(2000-09-29)

  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;

Delphi中的几种布尔类型详解

Delphi中预定义的布尔类型有四种:Boolean ,ByteBool,WordBool,LongBool。其中,Boolean 类型是首选布尔类型,其余三种是为其它编程语言和Windows 环境提...
  • chenyq2008
  • chenyq2008
  • 2014年10月28日 15:45
  • 2131

JavaBean中布尔类型使用注意

JavaBean是一个标准,遵循标准的Bean是一个带有属性和getters/setters方法的Java类。JavaBean的定义很简单,但是还有有一些地方需要注意,例如Bean中含有boolean...
  • danchu
  • danchu
  • 2017年04月26日 19:59
  • 1379

Delphi中布尔类型辨析

====================================================== 注:本文源代码点此下载 =============================...
  • javazhuanzai
  • javazhuanzai
  • 2012年01月13日 17:00
  • 154

Delphi中的几种布尔类型详解

Delphi中预定义的布尔类型有四种:Boolean ,ByteBool,WordBool,LongBool。其中,Boolean 类型是首选布尔类型,其余三种是为其它编程语言和Windows 环境提...
  • chenyq2008
  • chenyq2008
  • 2014年10月28日 15:45
  • 2131

布尔类型的

  • 2012年11月07日 18:42
  • 317B
  • 下载

Swift教程:Swift基础,布尔类型

  • 2015年08月21日 11:10
  • 58.56MB
  • 下载

《GOF设计模式》—解释器 (INTERPRETER)—Delphi源码示例:对布尔表达式进行操作和求值

示例:对布尔表达式进行操作和求值 说明: (1)、文法      在这个语言中终结符是布尔变量,即常量true和false。"非终结符表示"包含运算符and,or和not的...
  • starsky2006
  • starsky2006
  • 2011年01月21日 09:45
  • 409

C语言的布尔类型(_Bool)

Technorati 标签: C,布尔,boolean,_Bool,stdbool.h          也许很多人都和我一样,从C99标准开始,不知道C语言已经有了布尔型,类型名字为“_Bool”...
  • daheiantian
  • daheiantian
  • 2011年02月05日 13:04
  • 29862

Php布尔和字符串类型的使用详解

数据类型——布尔类型   再往下看第三个,第三个呢就是我们的布尔类型,布尔类型比较简单它只有两个值,要么是真要么是假,真或假可以通过,TRUE代表真,或者是小写的true也可以,那假呢也通过,FAL...
  • lidiya007
  • lidiya007
  • 2016年11月16日 18:40
  • 258

【学习ios之路:C语言】布尔类型,关系运算符、逻辑运算符、if 、switch..case.语句

1.布尔类型     BOOL是一种表示非真即假的数据类型,存储YES(1)和NO(0)两个值       BOOL a = YES; printf("%d\n" , a...
  • ZFX5130
  • ZFX5130
  • 2014年12月07日 18:54
  • 1112
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi中布尔类型辨析
举报原因:
原因补充:

(最多只允许输入30个字)