天天看點

delphi程式設計裡bool跟boolean類型的差別

bool是LongBool類型。

Delphi中定義了四種布爾類型:Boolean,ByteBool,WordBool和LongBool。後面三種布爾類型是為了與其他語言相容而引入的,一般情況下建議使用Boolean類型。

這四種類型的布爾值占用記憶體的數量如下:

Boolean 1 Byte

ByteBool 1 Byte

WordBool 2 Bytes(1 Word)

LongBool 4 Bytes(2 Words)

對于ByteBool,WordBool和LongBool三種類型True常量的值為非零,False為零,可以用Ord函數驗證;

而對于Boolean類型,True常量的值為1,False為零。在期望Boolean值的上下文中,編譯器會将ByteBool,WordBool和LongBool三種類型的非零值轉換為True。

然而,在Delphi中布爾表達式和Integer/Real是不相容的。下面的表格對比了Boolean與ByteBool/WordBool/LongBool在異同:

Boolean

 False < True

Ord(False) = 0

Ord(True) = 1

Succ(False) = True

Pred(True) = False

BoolToStr(True) = -1 //這個函數很變态

BoolToStr(False) = 0

ByteBool, WordBool, LongBool

False <> True

Ord(False) = 0

Ord(True) <> 0

Succ(False) = True

Pred(False) = True

BoolToStr這個函數最莫名其妙了,明明說True的值是1,而它卻告訴我們True是-1。函數的原形是:

function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;

下面這個表是函數的轉換規則:

B UseBoolStrs Value of returned string

True False '-1'

True True TrueBoolStrs數組的第一個值(default, 'TRUE')

False False '0'

False True FalseBoolStrs數組的第一個值(default, 'FALSE')

原文來自:100腳本網

繼續閱讀