Pascal では、整数 (符号付き) が基本型です。他のすべての整数型は整数の部分範囲です。(TP では longint が、Delphi では int64 が与えられているため、Borland 方言ではこれが完全に当てはまるわけではありませんが、十分に近いです)。
その重要な理由は、計算の中間結果が負になり、符号なし整数で計算すると、範囲チェック エラーがトリガーされ、ほとんどの古いプログラミング言語は 2 の補数の整数を想定していないため、結果 (範囲チェックがオフの場合)破損している可能性さえあります。
THandle のケースはもっと単純です。Delphi には、D4 まで適切な 32 ビット符号なしはありませんでしたが、31 ビット カーディナルしかありませんでした。(32 ビットの符号なし整数は整数の部分範囲ではないため、後の符号なし整数は int64 のサブセットであり、D2010 でのみ追加された uint64 に問題が移動しました)
そのため、ヘッダーの多くの場所で、winapi が署名されていない型を使用する場所で、署名された型が使用されます。おそらく、これらのバージョンで 32 番目のビットが誤って破損し、カスタムが動かなくなるのを防ぐためです。
しかし、winapi のケースは一般的なケースとは異なります。
後で追加された一部の Pascal (および Modula2/3) 実装では、整数を wordsize よりも大きいサイズに設定することでこのトラップを回避し、以下のプログラムのように、すべての数値型に適切な部分範囲を宣言するよう要求します。
1つ目は、すべてが整数のサブセットであるという主な仮定を保持し、2つ目は、特にCPUにワード操作よりも大きな操作がある場合に、コンパイラがレジスタに収まるようにほぼすべてを縮小できるようにします。(32 ビット * 32 ビット mul で 64 ビットの結果が得られる x86 のように、ステータス ビットを使用してワードサイズのオーバーフローを検出できます (たとえば、完全な 2*ワードサイズの加算を行わずに加算の範囲例外を生成するため))
var x : 0..20;
y : -10..10;
begin
// any expression of x and y has a range -10..20
Turbo Pascal と Delphi は、16 ビットおよび 32 ビット製品のワードサイズの 2 倍の整数型をエミュレートします。最上位の unsigned 型の処理はせいぜいハックです。