Delphi2/3.x における Cardinal 型の妙な定義
|
>Delphi3.1のWindows.pasの中で、
> DWORD = Integer; と定義されていますが、
> DWORD = Cardinal; ではないのでしょうか。
>
>また、ヘルプ及びマニュアルに
> Cardinal 0〜2147483647 符号なし 32 ビットと書かれていますが、
> 0〜4294967295 ではないのでしょうか.。
残念ながらマニュアルの通りです。
また Cardinal 型の変数には マイナス値や 2147483647 を超える定数値を代入することは出来ませんが、「オプション」の「範囲チェックエラー」をオフにしておくと 計算の結果負数を持つことは出来ます。
例えば
var i: Cardinal;
:
:
i := 10;
i := i - 20;
if i >= 0 then ShowMessage('Plus')
else ShowMessage('Minus');
は Minus と表示されます。つまり Integer とほとんど変わりません。
[Delphi-ML:23120]によれば、Delphi4 ではちゃんと Cardinal=(0..2^32-1) になっているようです。 |
|