C语言小问题
为什么定义成float时后面跟6个零,定义成double时后面还是跟6个零。书上写着“一般编译系统为单精度类型分配4个字节”,那么也就是32位bit,为什么才有6个零,应...
为什么定义成float时后面跟6个零,定义成double时后面还是跟6个零。
书上写着“一般编译系统为单精度类型分配4个字节”,那么也就是32位bit,为什么才有6个零,应该有32-3(545占三位)=29个零才对啊? 展开
书上写着“一般编译系统为单精度类型分配4个字节”,那么也就是32位bit,为什么才有6个零,应该有32-3(545占三位)=29个零才对啊? 展开
4个回答
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然后输出看看结果。
你很多基本概念还不够清晰,善于思考是好的,但是思考时带着问题去看基础理论的书更有助于快速提高。
这是因为printf默认就输出那么多而已,跟保存能力是没有关系的。
书上写着“一般编译系统为单精度类型分配4个字节”,那么也就是32位bit,为什么才有6个零,应该有32-3(545占三位)=29个零才对啊?
这里的32位,指的是二进制位,每一位上只能保存1或者是0。所以你可以先想像一下让电脑保存一个带小数的数字有多艰难了吧?
其实float一般来说能有7位有效数字,而double能有15位,也就是说,545的话,小数点后还能有4位算是精确的。你可以试试输入一个float型的12.105然后输出看看结果。
你很多基本概念还不够清晰,善于思考是好的,但是思考时带着问题去看基础理论的书更有助于快速提高。
展开全部
谁教你545占三位啊大哥?
位是按二进制的说法
位是按二进制的说法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
兄弟,补一下浮点数表示知识:
X = a * (2^e),则IEEE 中的 float表示如下
float :
第1位 符号
第2-9 位 e+128
第10-32位 a-1 ( a的范围[1,2))
并不是直接按从高到低排列的
X = a * (2^e),则IEEE 中的 float表示如下
float :
第1位 符号
第2-9 位 e+128
第10-32位 a-1 ( a的范围[1,2))
并不是直接按从高到低排列的
追问
我们的书才上了7页,你说这些我不懂……谢谢了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
float是单精度型占4个字节(32位),只能提供7位有效数字,小数点后最多保留6位。
double是双精度型占4个字节(64位),只能提供16位有效数字,小数点后最多保留6位。
double是双精度型占4个字节(64位),只能提供16位有效数字,小数点后最多保留6位。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |