Delphi中布尔类型辨析

原创 2001年08月10日 11:04:00
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;

  摘自《赛迪网》 /文

Delphi中布尔类型辨析

2001年01月11日 08:54:00 Delphi中布尔类型辨析苏涌(2000-09-29)  Delphi中预定义的布尔类型有四种:Boolean ,ByteBool,WordBool,...
  • softart
  • softart
  • 2007年10月27日 07:48
  • 186

Delphi中的几种布尔类型详解

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

js 布尔类型

js中的布尔类型 在js里,有好几种基本数据类型(与java类似)。其中的一种基本数据类型就是布尔类型(即Boolean),它只有2个值,true/fasle。 布尔类型true/fasle与字符...
  • B_qxzb
  • B_qxzb
  • 2015年11月11日 21:47
  • 2130

MySQL中如何使用布尔类型

在SQL标准中,存在bool和boolean类型。在MySQL中也可以定义这两种类型,但是这两种类型最终转换成的是TINYINT(1)类型。 所以在MySQL中,布尔类型等价于TINYINT(1)。...
  • Dylancy
  • Dylancy
  • 2017年07月25日 17:33
  • 1790

关于mysql布尔类型的存储

首先mysql是不支持布尔类型的,当把一个数据设置成布尔类型的时候,数据库会自动转换成tinyint(1)的数据类型,其实这个就是变相的布尔。 默认值也就是1,0两种,分别对应了布尔类型的true...
  • kenzyq
  • kenzyq
  • 2017年01月03日 17:56
  • 4722

Delphi中的布尔类型

Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool。后面三种布尔类型是为了与其他语言兼容而引入的,一般情况下建议使用Boolean类型。这四种类型的...
  • yujianqiu
  • yujianqiu
  • 2005年02月04日 17:47
  • 879

oracle有没有布尔型数据类型

pl/sql里面有   oracle   sql没有,pl/sql   有             BOOLEAN     You   use   the   BOOLEAN   datatype  ...
  • mydriverc
  • mydriverc
  • 2007年07月24日 15:52
  • 3562

delphi boolean 类型转成string型

由于调试时需要跟踪一个boolean变量,直接把它转成string型显示出来就行 用到booltostr(); var f :boolean;    可以booltostr( f , true)...
  • godlove_ymx
  • godlove_ymx
  • 2014年01月13日 17:16
  • 2013

每天学点Python之布尔类型

每天学点Python之布尔类型Python中的布尔类型有两个常量True和False表示。布尔值转化Python中的布尔值是可以转化为数值的,True表示1,而False表示0,可以对其进行数值运算,...
  • u013291394
  • u013291394
  • 2015年12月18日 14:50
  • 1386

SQL Server中的布尔类型Bit

在SQL Server中,并没有布尔类型True和False,但其实还有一个不错的选择,那就是Bit。Bit类型只有1和0两个值,它使用起来有一点奇怪,在对它进行赋值操作的时候,你应该将它当做数字1和...
  • sinkfish
  • sinkfish
  • 2008年07月29日 09:17
  • 9162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi中布尔类型辨析
举报原因:
原因补充:

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