0

我正在运行这两个printf()函数,并且对它们生成的输出有点困惑。

  1. printf("%0.4f",3467);

它输出 - 3467.0000。在第一个参数中,0.4f4 被理解为它代表小数点后的 4 个零,但我不确定0当我将它更改为 1、2、3 时它保持不变。那么它有什么作用呢?

  1. printf("%1.6u\n", -32);

在运行这个时,我得到4294967264这个数字到底指的是什么?

在询问之前,我检查了printf()链接,它指的是sprintf()进行参数查找,但无法在此找到一些东西。

4

1 回答 1

2

%0.4f 中的 0 是格式化值时输出的最小长度。在您的情况下,除非您将其更改为 10 或更高,否则您不会看到任何输出差异,因为这样的输出将始终为 3467.0000。如果您将 0 更改为 15,您将在格式化输出前得到一个空白:

printf("%15.4f", 3467);
      3467.0000
|        |    |
1       10    5

在您的浏览器中,您不会看到多余的空格,但如果您另外告诉它使用点作为填充字符,您将看到它:

printf("%'.15.4f", 3467);
......3467.0000
|        |    |
1       10    5

至于你的第二个问题。您正在将有符号值格式化为无符号输出。-32 作为无符号 32 位整数是 FFFFFFE0。如果您告诉 printf 将其输出为无符号,您将获得 FFFFFFE0 的无符号值,即 4294967264。

于 2013-02-23T20:37:38.253 回答