国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Delphi > 正文

Delphi中布爾類型辨析

2019-11-18 18:48: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: 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給OICQ動手術(二)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 平湖市| 兰考县| 老河口市| 平邑县| 屏山县| 仙居县| 辽阳市| 南江县| 通山县| 北票市| 星子县| 广西| 安远县| 莱州市| 汝南县| 罗山县| 临泽县| 花莲县| 陇南市| 阳江市| 合江县| 涿鹿县| 萝北县| 金乡县| 大渡口区| 七台河市| 灵寿县| 舞钢市| 沐川县| 昆山市| 公安县| 安溪县| 新蔡县| 林甸县| 高台县| 绥德县| 温州市| 凌源市| 个旧市| 常宁市| 庆阳市|