5

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

该函数的文档Format说:

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

所以我本来期望结果为'100'.

这是一个错误吗?

4

1 回答 1

13

不,这不是错误。

你说Format第一个参数是一个无符号整数,但实际上你传递了一个有符号整数。该有符号整数被解释为无符号,并且 -100 的有符号值的位模式等同于 的无符号值4294967196

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

于 2012-07-02T11:36:02.160 回答