为什么float类型可以接收long类型?(为什么float比long范围大)

  • 转换原则(低精度向高精度转换):byte->(short,char)->int->long->float->double

IEEE754浮点数标准

  • IEEE754标准包含一组实数的二进制表示法。它有三部分组成:符号位, 指数位, 尾数位
  • 三种精度的浮点数各个部分位数如下
精度符号阶/指数尾数
单精度1823
  1. 第一部分用来存储符号位(sign),用来区分正负数,0正1负。
  2. 第二部分用来存储指数(exponent),指数也有正负之分,指数位确定大小范围。
  3. 第三部分用来存储小数(fraction),小数位决定了计算精度,因为小数位能表示的数越大,精度越大,数值越准确。

指数位确定范围

  • 指数可能是负数,也有可能是正数。而有符号整数的计算是比无符号整数麻烦的。所以为了减少不必要的麻烦,在实际存储指数的时候,需要把指数转换成无符号整数。
  • 我们看到float的指数部分是8位,则指数的取值范围是 -126到+127,为了消除负数带来的实际计算上的影响(比如比较大小,加减法等),可以在实际存储的时候,给指数做一个简单的映射,加上一个偏移量,比如float的指数偏移量为127。

小数位确定精度

  • float和double的精度是由尾数的位数来决定的
  • float:2^23 = 8388608,一共七位,由于最左为1的一位省略了,这意味着最多能表示8位数,但绝对能保证的为7位,也即float的精度为7~8位有效数字(算上整数的一位)
  • double:2^52 = 4503599627370496,一共16位,同理,double的精度为16~17位

总结

  • long:2^63-1;
  • float : float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38
  • 所以:float的数据范围大于long的数据范围
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值