首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

对<printf("%f"10/3); 答案是多少?>帖子的小白解释(帮助理解)解决思路

2012-02-14 
对printf(%f,10/3) 答案是多少?帖子的小白解释(帮助理解)打个比方:在玉米的观念里(printf()对整型数

对<printf("%f",10/3); 答案是多少?>帖子的小白解释(帮助理解)
打个比方:

在玉米的观念里(printf()对整型数据的浮点解读),春哥(整型)是可爱的女人(未确定值);在我们的眼光里(对整型数据的整型解读),春哥是纯爷们(正解).

你让printf()用玉米的眼光去理解春哥,所以只能告诉你她是可爱的女人...

你竟然来发帖说,omg,春哥怎么会是女人呢?!!

(PS:恶搞无恶意,搞搞别生气)

[解决办法]
楼主,你提的问题非常棒!
解决这个问题,设计cpu对整形数和浮点数的处理是不一样。整数好像是用补码表示,而浮点数采用IEEE754浮点数格式(注:好像还有其他的表示方法,请楼主自己去证实吧)。

#include <stdio.h>

int main()
{
printf("%f", 10/3);
printf("%f", (float)10/3);
return 0;
}

编译成汇编后:
.file"test.c"
.def___main;.scl2;.type32;.endef
.section .rdata,"dr"
LC0:
.ascii "%f\0"
.align 8
LC1:
.long-1610612736
.long1074440874
.text
.globl _main
.def_main;.scl2;.type32;.endef
_main:
pushl%ebp
movl%esp, %ebp
subl$24, %esp
andl$-16, %esp
movl$0, %eax
addl$15, %eax
addl$15, %eax
shrl$4, %eax
sall$4, %eax
movl%eax, -4(%ebp)
movl-4(%ebp), %eax
call__alloca
call___main
movl$3, 4(%esp)
movl$LC0, (%esp)
call_printffldlLC1
fstpl4(%esp)
movl$LC0, (%esp)
call_printfmovl$0, %eax
leave
ret
.def_printf;.scl3;.type32;.endef
比较两段有颜色的代码你可以明白了吧。呵呵,至于那个0,其实是个随机值。

热点排行