c语言基础(初学) 看看这个程序,分析一下,为什么会出现这个结果,谢谢

 我来答
adoqq_bd
2011-10-25 · TA获得超过7050个赞
知道大有可为答主
回答量:1818
采纳率:63%
帮助的人:1602万
展开全部
又是这样的问题,再解释一次

计算机的浮点数存储依照IEEE754规范,它是这样规定的:
浮点数由两部分组成:底数部分M+指数部分E: M*2E (M和E都是2进制的

32位二进制是这样划分的:

FEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM

其中F是符号位和(和整数一样)E是指数位M是有效数字位(看起来是23位,实际上是24位,并且最高位始终为1)指数部分8位,由于指数可以为负数,所以IEEE754规则规定此处的值减去127为实际指数

整数1的二进制是这样存储的
00000000 00000000 00000000 00000001
把这个数当浮点数看待,那就是:

eeeeeee e
0000000 0
MMMMMMMM MMMMMMMM MMMMMMMM
10000000 00000000 00000001

指数部分为0-127=-127,所以有效数字10000000 00000000 00000001的小数点要向左移动127位,那就是0.000000.....0001了,早超出有效位了,自然输出就是0.0000000了

就算是
printf("%f",1);
它也一样输出0.000000
要输出1.00000必须明确指定1是个float
printf("%f",1.0);这样输出就是1.00000

至于用%d格式输出b也是0的情况,就是是编译器差异了,你的编译器可能是把int 1换成float,然后把转换后的float逻辑上截断赋值给b,那就是0了,我用vs2010,%d的输出是1,所以要尽量避免使用此类代码
dwjchdu
2011-10-24 · TA获得超过5914个赞
知道大有可为答主
回答量:4576
采纳率:60%
帮助的人:1088万
展开全部
很简单,因为b是整形,一个浮点型的数字不能直接赋给整形!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寒风H凛冽
2011-10-25 · TA获得超过108个赞
知道答主
回答量:93
采纳率:0%
帮助的人:45.7万
展开全部
因为你那个b= a/ 1000 ; b 是Int 所以b算出来是整形的!即b=0,所以以%d输出就是 0 以%f输出就是0.000000!
而你输出a那一行输出与数是b,所以同上!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
时筠溪Uu
2011-10-25 · TA获得超过159个赞
知道答主
回答量:103
采纳率:0%
帮助的人:58.4万
展开全部
首先你要明白/的意思 这是整除的意思 如果有int型数据 则会默认把小数点后的数四舍五入掉

至于输出的格式不一样 那是应为你的输出语句中有格式符 比如%f浮点型 %d整数型 通过这些格式符 系统会自动转换输出变量的格式 所以同一个变量输出的效果却不一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式