Format('%u', [-100])
はなぜ'4294967196'
になるのですか?私はこれをD7とXE2でテストしました。 '%u'の書式は、負の数値を指定すると間違った値を出力するのはなぜですか?
Format
機能上のdocumentation
% uの符号なし10進。 %dと似ていますが、符号は出力されません。
したがって、結果は'100'
と予想されます。
これはバグですか?
Format('%u', [-100])
はなぜ'4294967196'
になるのですか?私はこれをD7とXE2でテストしました。 '%u'の書式は、負の数値を指定すると間違った値を出力するのはなぜですか?
Format
機能上のdocumentation
% uの符号なし10進。 %dと似ていますが、符号は出力されません。
したがって、結果は'100'
と予想されます。
これはバグですか?
いいえ、これはバグではありません。
あなたは、最初の引数は、符号なし整数であるFormat
を言っているが、実際には、あなたは、符号付き整数を通過しました。その符号付き整数は符号なしとして解釈され、-100の符号付き値のビットパターンは符号なし値4294967196
に相当します。
実際には、コードに誤りがあります。書式文字列は、Format
の引数が弱く型付けされているため、コンパイラが強制できないコントラクトを定義します。あなたが符号なしの値を渡すことを約束したときに実際に符号なしの値を渡すかということを確認するあなたの責任です。ここでのコードの誤りは、論理的には文字列や浮動小数点の値を渡すことに相当します。浮動小数点の値はエラーであり、はるかに容易に認識できます。
Whoeha、これは私の主な誤解です。_unsigned decimal_は出力ではなく入力のタイプです。 – NGLN
@NGLN:Printf形式の関数はそのように動作します –