C语言小问题

为什么定义成float时后面跟6个零,定义成double时后面还是跟6个零。书上写着“一般编译系统为单精度类型分配4个字节”,那么也就是32位bit,为什么才有6个零,应... 为什么定义成float时后面跟6个零,定义成double时后面还是跟6个零。

书上写着“一般编译系统为单精度类型分配4个字节”,那么也就是32位bit,为什么才有6个零,应该有32-3(545占三位)=29个零才对啊?
展开
 我来答
匿名用户
2011-03-22
展开全部
为什么定义成float时后面跟6个零,定义成double时后面还是跟6个零。
这是因为printf默认就输出那么多而已,跟保存能力是没有关系的。

书上写着“一般编译系统为单精度类型分配4个字节”,那么也就是32位bit,为什么才有6个零,应该有32-3(545占三位)=29个零才对啊?
这里的32位,指的是二进制位,每一位上只能保存1或者是0。所以你可以先想像一下让电脑保存一个带小数的数字有多艰难了吧?
其实float一般来说能有7位有效数字,而double能有15位,也就是说,545的话,小数点后还能有4位算是精确的。你可以试试输入一个float型的12.105然后输出看看结果。

你很多基本概念还不够清晰,善于思考是好的,但是思考时带着问题去看基础理论的书更有助于快速提高。
tonydelwee
2011-03-22 · TA获得超过672个赞
知道小有建树答主
回答量:395
采纳率:0%
帮助的人:408万
展开全部
谁教你545占三位啊大哥?
位是按二进制的说法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是百人敌
2011-03-22 · TA获得超过358个赞
知道小有建树答主
回答量:310
采纳率:0%
帮助的人:268万
展开全部
兄弟,补一下浮点数表示知识:
X = a * (2^e),则IEEE 中的 float表示如下
float :
第1位 符号
第2-9 位 e+128
第10-32位 a-1 ( a的范围[1,2))
并不是直接按从高到低排列的
追问
我们的书才上了7页,你说这些我不懂……谢谢了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fcl_andy
2011-03-22 · 超过24用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:55.7万
展开全部
float是单精度型占4个字节(32位),只能提供7位有效数字,小数点后最多保留6位。
double是双精度型占4个字节(64位),只能提供16位有效数字,小数点后最多保留6位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式