printf如何工作?为什么输出不同?

时间:2016-06-15 09:03:34

标签: c floating-point printf type-punning

考虑这两个程序:

#include <stdio.h>

int main()
{
  int z = 6.4;
  printf("%d %d", z, 6.4);
  return 0;
}

输出为6 -1717986918

#include <stdio.h>

int main()
{
  int z = 6.4;
  printf("%d %d", 6.4, z);
  return 0;
}

输出为-1717986918 1075419545

为什么输出变化如此?当z是第一个时,输出打印的正确z6z是一个整数,但是当我颠倒参数时,输出是不同的值。为什么它会像那样?

1 个答案:

答案 0 :(得分:2)

您将6.4存储在一个整数中,这将导致z6。 6传递给printf将传递的值解释为十进制,从而显示正确的输出。

但是如果将浮点数直接传递给printf并指定格式%d,它也会将其解释为小数,这将导致该浮点数的十进制解释。

这种解释在某种程度上发生。 Float在内部以相当复杂的格式存储。但不像整数。 现在这些位将解释器变为整数,显然结果对于人类来说是不可读的。但是程序实际上可以将整数解释为float并反转此操作。

This站点将演示浮点数如何存储在位级别上。

this网站上,您可以将之前网站的位转换为有符号整数,该整数应输出您在问题中指定的负数。