浮点数的存储和范围

浮点数的存储和范围

今天看到浮点数的范围是-3.4E-38~3.4E38,我就有些奇怪了,为什么和int同是4个字节,浮点数表示的范围比int大得多得多?虽说不准,但是怎么存储的呢?由于智商有限,花了半个多小时才理解。下面介绍下浮点数的存储。

浮点数的存储方式
  • 以float为例,浮点数在内存中分为符号(1位)阶码(8位)尾数(23位)三部分存储。
浮点数小数部分二进制存储

小数点后第一位是2-1,第二位为2-2……以此类推

浮点数存储举例

以100.1为例,正数,符号位为0,100二进制表示为1100100,0.1二进制表示为0.00011000001……无穷尽,懒得算到那么多位了……(PS:由于到达位数会截断,这也是为什么浮点数有误差的原因)

  • 符号位的由来:0为正,1为负。
  • 尾数的由来:
    那么100.1就可以表示为1100100.00011000001……。由于数字第一位一定为1,所以把1省略,小数点向前移动6位,尾数为10010000011000001……
  • 阶码的由来:上面提到移动了6位,由于要表示正负,阶码8位,所以阶码为0其实是1000 0000,移动6位,加上6后的阶码为1000 0110
  • 最终存储表示:【0】【1000 0110】【1001 0000 0110 0000 1……】

浮点数的范围由来

【0】【1111 1111】【1111 1111 1111 1111 1111 111】
移动127位,大约达到2127,最小约为2-127.

浮点数的精度

例如float精度是6~7位,其实因为float尾数23位,可以存储223为7位,能精确表示的就是6位。
而double精度为15~16位,其实因为double尾数52位,可以存储252为16位,能精确表示的就是15位。

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值