C语言为什么int用%f输出是0.000000?

Quester-King 2012-03-04 03:12:24
printf("%f",2);

我是想让这个整形数“2”按照浮点数输出。
我猜测输出应该是2.0一类的浮点数,可是为什么输出是0.0000000?
如果把代码改成:
printf("%f",(float)2);

就可以了,输出就是2.00000

这是为什么呢?
...全文
2663 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2012-03-04
  • 打赏
  • 举报
回复 1
在网上你可以看到说 printf 家族函数都是不安全的。
这就是原因。
AnYidan 2012-03-04
  • 打赏
  • 举报
回复
看看可变参数
xspace_time 2012-03-04
  • 打赏
  • 举报
回复
2转化为double类型0|10000000000|0000000000000000000000000000000000000000000000000000
按double读出来就是0*2^11
没有蜡 2012-03-04
  • 打赏
  • 举报
回复
前面有个帖子很火的printf("%f,整形");
不过讨论这些没什么意义
huangziyun 2012-03-04
  • 打赏
  • 举报
回复
请参考IEEE754浮点数存储标准

printf("%f",2);
这样指定输出并不会进行隐式类型转换,只是将2在内存中的二进制形式按照float存储标准来解析
pp25210 2012-03-04
  • 打赏
  • 举报
回复
printf();函数中的参数“%f” “%d”等,只是用来告诉编译器对数据的读取以及处理方式,如果用%f 则编译器会从&2的启示地址开始读取 sizeof(float)个字节然后进行浮点型数据的处理,并不会对原数据做类型转换,所以printf("%f",2); 输出是0.0000000 而 printf("%f",(float)2);输出就是2.00000。至于具体的浮点型数据和整型数据的截取处理方式可以去看看《C primer plus》,里面有提到过,至于具体章节记不清了
bluewanderer 2012-03-04
  • 打赏
  • 举报
回复
printf("%f", 2) <- 参数"%f"是运行时的,按照规则编译器是不可能知道你希望第二个参数是浮点数类型,所以也就不可能把int类型的2自动转换成浮点类型的2。

另外%f需要的是64位的double,现在你只提供了低32位,高32位只能依赖栈里原有的数据。double类型最高12位小于1003,对应的十进制数就肯定小于0.000001,所以很容易就会输出0.000000
Arnold9009 2012-03-04
  • 打赏
  • 举报
回复
请参考IEEE754浮点数存储标准

printf("%f",2);
这样指定输出并不会进行隐式类型转换,只是将2在内存中的二进制形式按照float存储标准来解析

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧