5

なぜFormat('%u', [-100])結果が'4294967196'? これを D7 と XE2 でテストしました。

関数に関するドキュメントには次のように書かれています。Format

%u 符号なし 10 進数。%d と同様ですが、符号は出力されません。

だから私は として結果を期待していたでしょう'100'

これはバグですか?

4

1 に答える 1

13

いいえ、これはバグではありません。

最初の引数は符号なし整数であると言っFormatていますが、実際には符号付き整数を渡しました。その符号付き整数は符号なしとして解釈されており、-100の符号付き値のビットパターンは、の符号なし値と同等です4294967196

実際、コードにエラーがあります。Formatフォーマット文字列は、引数が弱く型付けされているためにコンパイラが強制できないコントラクトを定義します。符号なしの値を渡すことを約束するときに、実際に符号なしの値を渡すことを確認するのはあなたの責任です。ここでのコードの誤りは、文字列または浮動小数点値を渡すことと論理的に同等です。これは、はるかに簡単に認識できるエラーです。

于 2012-07-02T11:36:02.160 に答える