使用 printf 打印浮点值

2024-02-06

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
  int x, *ptr_x;
  float f , *ptr_f;

  ptr_f = &f;
  ptr_x = &x;
  *ptr_x = 5;
  *ptr_f = 1.5; //printf("%d %f\n", f,x);

  printf ("\n\nxd = %d \t xf = %f \n ff = %f \t fd = %d", x,x,f,f);
  return 0;
}

ff = %f 的输出不是预期的。

xd = 5 xf = 0.000000
ff = 0.000000fd = 1073217536


printf() 不是类型安全的。

您传递给的参数printf()是根据什么来对待的you向编译器承诺。

Also, floats 晋升为doubles 当通过可变参数传递时。

所以当你向编译器承诺%f第一次(对于xf),编译器吞噬了整个double(通常是 8 个字节)来自参数,在这个过程中吞掉你的浮点数。然后是第二个%f直接切入第二个双精度数的零尾数。

这是你的论点的图片:

+-0-1-2-3-+-0-1-2-3-+-0-1-2-3-4-5-6-7-+-0-1-2-3-4-5-6-7-+
|    x    |    x    |        f        |        f        |
+---------+---------+-----------------+-----------------+

%d--------|%f----------------|%f---------------|%d------|

But f看起来像这样(已晋升为double):

f = 3FF8000000000000

让我们用值再次绘制它,并推测您的机器字节序:

| 05000000 | 05000000 | 00000000 0000F83F | 00000000 0000F83F |
| %d, OK   | %f, denormal...    | %f, denormal...   | %d, OK  |

请注意,1073217536 是 0x3FF80000。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 printf 打印浮点值 的相关文章

随机推荐