a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > 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中實現任意形狀的窗體

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

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 欧美成人免费网站 | 国产高清免费 | 国产精精品 | 国产精品1区2区3区 国产成人精品一区二区三区四区 | 最新日韩在线观看视频 | 成人午夜在线视频 | 欧美激情精品久久久久 | 国产中文在线 | 伊人狠狠干 | 91视频分类| 国产99久久久久久免费看农村 | 日日夜夜爽 | 欧美中文字幕在线观看 | 午夜精品久久久久久 | 国产精品久久久久久久久久 | 欧美精品一区二区三区一线天视频 | 国变精品美女久久久久av爽 | 九九精品视频在线 | 亚洲黄色性视频 | 国产在线国偷精品产拍 | www.日韩大片| 欧美性猛交xxxx免费看漫画 | www.白白色| 中文字幕在线视频免费观看 | 欧美一级欧美三级在线观看 | 蜜月久久99静品久久久久久 | 欧美手机在线 | 欧美国产精品 | 一区二区免费视频 | 一级黄色大片在线 | 欧美精品成人 | 国产女人高潮大叫a毛片 | 欧美成人a | 自拍色图| 四虎av影视| 成年人网站国产 | 亚洲精品久久久久久下一站 | 免费中文字幕 | 欧洲天堂网 | 久久精品国产亚洲 | 成人精品久久 |