printf("%f ",3);输出的是0000?

mizaru 2017-08-01 03:28:09

void main()
{
printf(" %f \n ",3);
printf("3 ÷2 is %f \n",3/2);
printf("3 ÷2 is %d \n",3/2);
getchar();
}


输出结果,第一个

0.000000
3 ÷2 is 0.00000
3 ÷2 is 1

what happen ?
1.用 %f 输出整数常量,其值为0
2.用 %f 输出 3/2,其值也为0
3.用%d输出3/2,其值为1,这个可以理解,应该是1.5被转为整数导致的精度丢失。。

就是前面两个完全搞不懂。。
...全文
707 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Remove_ 2017-08-08
  • 打赏
  • 举报
回复
因为float和int的存储结构在内存中完全不一样。所以会出现这么奇怪的问题。
jena_wy 2017-08-08
  • 打赏
  • 举报
回复
printf("%f",1);打印的也是0,float和int的存储方式不同
mizaru 2017-08-08
  • 打赏
  • 举报
回复
谢谢,其实我想了解下,看什么书可以从计算机设计的层面理清这个现象的原因?
枫闲言 2017-08-03
  • 打赏
  • 举报
回复
并不相同,由于%f适用于输入输出f'loat类型的,而3是整形的无法识别,才显示为0.0000,如你输出的是浮点型的就能正常识别了。 例:把3改为3.0
lin5161678 2017-08-03
  • 打赏
  • 举报
回复
引用 7 楼 kakabulusi 的回复:
[quote=引用 3 楼 lin5161678 的回复:] [quote=引用 2 楼 kakabulusi 的回复:] 楼上正解,使用强制转换操作,将数字转化一下格式就能正常显示了。 写成 3f 3.00 都可以实现转换, 除法运算中,也需要进行相应的处理 整数/整数 equal 整数,如果需要转换,写成 3.00/2 或者 3/2.00 或者强制转换后再进行乘除,系统在运算时候会自动对齐操作后再进行运算操作。
3f是语法错误[/quote] 3f 是高版本C++的隐式转换声明,也可能和编译器本身有关,[/quote]应该是你记错了 就算是 C++14 3f 也是一个语法错误
赵4老师 2017-08-03
  • 打赏
  • 举报
回复
http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
谁吃薄荷糖 2017-08-03
  • 打赏
  • 举报
回复
一般都是变量在printf里,直接3的话有问题吧。再者3是int型。%f是输出float型,不匹配啊。
lin5161678 2017-08-03
  • 打赏
  • 举报
回复
引用 7 楼 kakabulusi 的回复:
[quote=引用 3 楼 lin5161678 的回复:] [quote=引用 2 楼 kakabulusi 的回复:] 楼上正解,使用强制转换操作,将数字转化一下格式就能正常显示了。 写成 3f 3.00 都可以实现转换, 除法运算中,也需要进行相应的处理 整数/整数 equal 整数,如果需要转换,写成 3.00/2 或者 3/2.00 或者强制转换后再进行乘除,系统在运算时候会自动对齐操作后再进行运算操作。
3f是语法错误[/quote] 3f 是高版本C++的隐式转换声明,也可能和编译器本身有关,[/quote]哪个版本?
kakabulusi 2017-08-02
  • 打赏
  • 举报
回复
引用 3 楼 lin5161678 的回复:
[quote=引用 2 楼 kakabulusi 的回复:] 楼上正解,使用强制转换操作,将数字转化一下格式就能正常显示了。 写成 3f 3.00 都可以实现转换, 除法运算中,也需要进行相应的处理 整数/整数 equal 整数,如果需要转换,写成 3.00/2 或者 3/2.00 或者强制转换后再进行乘除,系统在运算时候会自动对齐操作后再进行运算操作。
3f是语法错误[/quote] 3f 是高版本C++的隐式转换声明,也可能和编译器本身有关,
侦探蜡笔小新 2017-08-02
  • 打赏
  • 举报
回复
3/2 是int类型运算 3.0/2 是浮点类型运算 printf不存在隐式类型转换
ck2333 2017-08-01
  • 打赏
  • 举报
回复
输出前要进行类型转换,printf()不会帮你转换的,如果格式不对就会这样。
	printf ("%f\n",(float)3);
赵4老师 2017-08-01
  • 打赏
  • 举报
回复
自信男孩 2017-08-01
  • 打赏
  • 举报
回复
建议了解一下float在内存中存储方式 http://blog.csdn.net/yezhubenyue/article/details/7436624 建议参考一下这个博主的博客~
lin5161678 2017-08-01
  • 打赏
  • 举报
回复
引用 2 楼 kakabulusi 的回复:
楼上正解,使用强制转换操作,将数字转化一下格式就能正常显示了。 写成 3f 3.00 都可以实现转换, 除法运算中,也需要进行相应的处理 整数/整数 equal 整数,如果需要转换,写成 3.00/2 或者 3/2.00 或者强制转换后再进行乘除,系统在运算时候会自动对齐操作后再进行运算操作。
3f是语法错误
kakabulusi 2017-08-01
  • 打赏
  • 举报
回复
楼上正解,使用强制转换操作,将数字转化一下格式就能正常显示了。 写成 3f 3.00 都可以实现转换, 除法运算中,也需要进行相应的处理 整数/整数 equal 整数,如果需要转换,写成 3.00/2 或者 3/2.00 或者强制转换后再进行乘除,系统在运算时候会自动对齐操作后再进行运算操作。
jena_wy 2017-08-01
  • 打赏
  • 举报
回复
Float 的存储结构和int 不同

69,369

社区成员

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

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