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

首頁 > 編程 > Delphi > 正文

Delphi中布爾類型辨析

2019-11-18 18:59:07
字體:
來源:轉載
供稿:網友
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中實現任意形狀的窗體

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

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 广平县| 涟水县| 拉萨市| 合肥市| 石首市| 阜宁县| 丰都县| 浮梁县| 陆川县| 兴义市| 习水县| 资中县| 东兴市| 长沙县| 南汇区| 彩票| 绵竹市| 会泽县| 裕民县| 勐海县| 松溪县| 久治县| 万源市| 东城区| 大兴区| 宝鸡市| 延川县| 遵义市| 崇义县| 浠水县| 文水县| 北宁市| 习水县| 吉安市| 阿克苏市| 博爱县| 洛南县| 大渡口区| 中卫市| 梓潼县| 乌兰浩特市|