float和double探究

float和double探究

问题说明

在看《java核心技术 卷1》 时中,发现float的有效位数为6-7位,当时感觉到很迷惑,或者6位,或者7位,6-7位有什么说法呢?浮点数的取值范围又是怎么得来的?
在这里插入图片描述
关于浮点数的取值范围什么的早就学过,但从来没有认真思考过,这次重学java,决定把那些细节深入探究一下。
后面记录了我查阅资料后发现的一些问题和答案。

注意: 浮点数(float 和double)使用 IEEE(电气和电子工程师协会)格式。几乎所有的相关的问题都可以在IEEE标准754 中找到答案。想看详细的原理和解释可以直接查看IEEE754

基础说明

java没有任何无符号类型(unsigned type)

这里先说一下int的格式。
在java中,int 固定4字节,32位
因为java中是有符号类型。所以32位中,第一位是符号位,数字是剩下的31位。
2^31 = 2147483648
所以int取值范围是 -2147483648 ~ +2147483648
int的相关信息很好理解。

下面开始正式说明浮点型。
float 是 四字节 32位
double 是 八字节 64位
浮点型就比整型复杂很多了。
存储布局如图:
在这里插入图片描述
先解释下为什么浮点型这么表示。
通常浮点数我们都用科学计数法表示,具有基数和指数。例如,十进制123.456可以表示为1.23456×102。在十六进制中,数字123.abc可以表示为1.23abc×162。在二进制中,数字10100.110可以表示为1.0100110×24
在计算机的存储中使用二进制表示,基数是2,那么一个二进制数就可以表示成A*2B,也就是说我们存储一个二进制数只需要存储A和B就行了,注意这里是有符号数,也就是说A和B是有正负的。
回到上面的float,由32位二进制数表示,这由人为规定了布局,也就是IEEE754标准。
格式为:
S EEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF
32位存储了指数尾数,也就是A * 2B中的A和B,先说指数(B),在32位中占据八位,使用0-31表示这32位,指数放置在1-8位,也就是上面的EEEEEEEE,注意,这八位的第一位是符号位,也就是说实际数值位是7位,指数取值范围是(-127~+128)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值