在Pascal中,整數(有符號)是基本類型。所有其他整數類型是整數的子範圍。 (這在Borland方言中並非完全正確,在TP中用longint表示,在Delphi中用int64表示,但足夠接近)。
一個重要的原因是,如果中間結果的計算結果爲負數,並且使用無符號整數進行計算,則會觸發範圍檢查錯誤,並且由於大多數較早的編程語言不假定2補數整數,範圍檢查關閉)甚至可能會損壞。
的THandle情況要簡單得多。德爾福沒有一個合適的32位無符號直到D4,但只有一個31位的紅衣主教。 (因爲32位無符號整數不是整數的子範圍,後面的無符號整數是int64的一個子集,它將問題轉移到僅在D2010左右添加的uint64)
因此,在標題中的很多地方簽名類型用於winapi使用無符號類型的地方,可能是爲了避免在這些版本中第32位被破壞,並且自定義卡住了。
但WINAPI案件不同於一般的情況不同。
以後添加一些帕斯卡(和Modula2/3)實施方式中通過在尺寸大於字長較大設定整數繞過這個陷阱,並且要求所有數值類型聲明一個適當的子範圍,如在下面的程序。
第一個持有主假定一切都是整數的一個子集,第二個允許編譯器再次縮放幾乎都記錄下來,以適應在寄存器中,特別是如果CPU有一些操作比字操作大。 (像86,其中32位* 32位的MUL給出了一個64位的結果,或可以檢測字長溢出使用狀態比特(例如,以產生範圍例外而不做了充分的2 *字長加法相加)
var x : 0..20;
y : -10..10;
begin
// any expression of x and y has a range -10..20
FPC的考慮很簡單:與Delphi兼容。德爾福對POS的考慮是(通過TurboPascal)可能回到1974 Pascal報告 –
Arioch:FPC也通過TP。這種東西早在FPC開始研究Delphi兼容性之前就已經決定了。 –