为什么四个字节的浮点数比八个字节的整数取值范围大

从基本数据类型中我们学到float所占的字节数与int相等,同样的double类型所占的字节数与long相等,那么为什么占用4字节的float要比占用8字节的long所表示的范围还要大呢。当然你也可能猜到了,可能是因为数据的存储形式不同。那么浮点类型和整形的存储形式有什么不同呢

对于单精度float来说一个float类型的数据所占位数为32位其中有一个符号位,指数8位,尾数数23位,
一个浮点数包括整数和小数两部分,当我们输入一个十进制的浮点数时例如30.3
首先先将整数部分转化成二进制,30的二进制为11110
其次是将小数部分转化为二进制,在这里转化成二进制的方式是将0.3*2=0.6,这里整数为0所以小数的第一位是0然后继续0.6 *2 =1.2,此时整数为1 所以我们取得小数第二位是1,然后再取小数0.2 2 =0.4 第三位取0,0.4 * 2=0.8 第四位取0,0.82=1.6 第五位取1 ,0.6 * 2=1.2 第6位取1,可以得到我们小数位为01001100110011…以0011循环
将整数与小数拼接11110.01001100110011在这里我们要转化成科学计数法1.11100100…E4,但是我们这里需要指数也进行二进制化也就是1.11100100…E100
到这里指数为0000 0100 也就是4
但我们在存储指数时规定需要加上0111 1111
也就是以1000 0011作为指数的数值来进行存储
在存储浮点数的时候存储的顺序为符号位 指数 尾数
对于双精度double类型来说
符号一位 指数11位 尾数52位
所以我们在存储指数的时候需要加上011 1111 1111
其他的操作与float类型相似
所以浮点数相比较于整数类型来说能够使用了指数的存储形式虽然准确程度不如整数类型,但是其数值的表达范围要远远大于整数类型。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值