免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: b_liu
打印 上一主题 下一主题

很简单的printf("%f",5) [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-04-08 11:36 |只看该作者
原帖由 b_liu 于 2007-4-7 23:39 发表
了解..连个printf都得小心..这就是C..呵呵

用K&R的话说是

C语言的设计思想就是:用C语言程序员知道自己在干什么,唯一的要求就是程序员要明确地表达他们的意图。

C语言不会猜你是想干什么,不会怀疑是否是你表达错了,它假设你是对的,你的例子它就假设你需要的结果是mik说的那个,不会根据你的%d假设5.0是5.事实上,如果printf的第一个参数不是个字符串常量,编译的时候根本不知道有没有%d

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
22 [报告]
发表于 2007-04-08 12:47 |只看该作者
原帖由 b_liu 于 2007-4-8 10:55 发表
加深理解..知其然,知其所以然..从中学到东西..
不清楚这些,如何成为一个优秀程序员


这种方式没有办法让你真正“知其知其所以然”。真的要知其所以然,就好好研究一下语言的实现和CPU,操作系统等等。总之,需要系统的学习,论坛不适合担当这个角色。

论坛徽章:
0
23 [报告]
发表于 2007-04-08 13:55 |只看该作者
原帖由 mik 于 2007-4-8 00:23 发表
1、第一条中,压入整数 5,也就是:0000 0000 0000 0000 0000 0000 0000 0101
    把这个数按浮点数格式来表示,是个极小极小的浮点数,接近0.0 ,故 printf 输出 0.00

2、第二条中,压入5.01 是个浮点数,也 ...


浮点数咋表示的? 小数点如何表示的.

论坛徽章:
0
24 [报告]
发表于 2007-04-08 14:53 |只看该作者
回楼上的,浮点数的储存方式有IEEE标准的。

论坛徽章:
0
25 [报告]
发表于 2007-04-08 15:50 |只看该作者
原帖由 mik 于 2007-4-8 00:23 发表
1、第一条中,压入整数 5,也就是:0000 0000 0000 0000 0000 0000 0000 0101
    把这个数按浮点数格式来表示,是个极小极小的浮点数,接近0.0 ,故 printf 输出 0.00

2、第二条中,压入5.01 是个浮点数,也 ...


好像不是你说的那样。就算第一个是接近于0,0.01也是浮点数。不是吗?应该和每个编译环境不同。

[ 本帖最后由 地球杀手 于 2007-4-8 15:54 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
26 [报告]
发表于 2007-04-08 15:53 |只看该作者
X86上,printf接受浮点数的参数不一定是在函数堆栈里接受,有可能是在X87寄存器栈里接受。

论坛徽章:
0
27 [报告]
发表于 2007-04-08 16:07 |只看该作者
原帖由 地球杀手 于 2007-4-8 15:50 发表


好像不是你说的那样。就算第一个是接近于0,0.01也是浮点数。不是吗?应该和每个编译环境不同。



这个问题应该就这样了..

论坛徽章:
0
28 [报告]
发表于 2007-04-08 16:11 |只看该作者
原帖由 MMMIX 于 2007-4-8 12:47 发表


这种方式没有办法让你真正“知其知其所以然”。真的要知其所以然,就好好研究一下语言的实现和CPU,操作系统等等。总之,需要系统的学习,论坛不适合担当这个角色。


没研究语言的实现和CPU,操作系统等等..

已经知其所以然了..谢谢

论坛徽章:
0
29 [报告]
发表于 2007-04-08 16:26 |只看该作者
和机器使用的是 little-endian 或者 big-endian 也有关系

论坛徽章:
0
30 [报告]
发表于 2007-04-08 17:31 |只看该作者
原帖由 cjaizss 于 2007-4-8 15:53 发表
X86上,printf接受浮点数的参数不一定是在函数堆栈里接受,有可能是在X87寄存器栈里接受。


在这一点上,是无需置疑的,X87寄存器只是起了计算结果临时存放的作用。最终结果还是需要保存在内存中,最终 printf 还是需要从内存中取结果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP