当我给它一个负数时,为什么带'%u'的格式打印错误值?

NGL*_*GLN 5 delphi string-formatting

为什么会Format('%u', [-100])导致'4294967196'?我在D7和XE2中对此进行了测试.

关于该功能的文档Format说:

%u无符号十进制.与%d类似,但不输出任何符号.

所以我希望得到一个结果'100'.

这是一个错误吗?

Dav*_*nan 13

不,这不是一个错误.

您告诉Format第一个参数是无符号整数,但实际上您传递了有符号整数.该有符号整数被解释为无符号,有符号值-100的位模式等于无符号值4294967196.

实际上你的代码是错误的.格式字符串定义了编译器无法强制执行的协定,因为参数Format是弱类型的.您有责任确保当您承诺传递无符号值时确实传递了无符号值.这里的代码中的错误在逻辑上等同于传递字符串或浮点值,这是一个您将更容易识别的错误.

  • 哇,这是对我的一个主要误解:_unsigned decimal_是输入类型而不是输出. (2认同)