浮点型在内存中的存储

根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式

V=(-1) ^ s * M * 2 ^ E

(-1) ^ s表示符号位,当s=0,V为正数;当s=1,V为负数

M表示有效数字,范围属于[1,2)

2 ^ E 表示指数位

例.

另外,IEEE754对M和E,还有一些特殊规定

对于M:前面提到,M属于[1,2),写成1.xxxxxx的形式(xxxxxx表示小数部分)

规定:在计算机内部保存M时,M的第一位总是1,因此可以被舍去,只保留xxxxxx部分。等到读取时再把第一位的1加上。(M只有23 bit,此操作可以节省一位有效数字,等同于保存24位数字)

对于一些小数,例如5.3(10进制),转化为2进制时,小数后位数超过23 bit,在计算机内部不能精确保存,有误差。如图:

对于E(存入) E是一个无符号整数

如果E时8位,取值范围:[0,255]          E为11位,取值范围:[0,2047]

但事实上,E可以为负数(0.5=1 * 2^(-1),此时E为-1),所以

规定:存入内存的值 = E的真实值(上述的-1)+ 中间数(8位E:127     11位E:1023)

举例:5.5(10进制)--> 101.1(2进制)

          用s,M,E表示;V=(-1)^0 * 1.011 * 2^2(其中E需要加上127)

存储为:0(s)  1000 0001(E)   01100000000000000000000 (M剩下位置用0补)

0100 0000 1011 0000……(16进制:40 b0 00 00)

取出E:分为三种情况

1.E不全为0或不全为1

E存入的值 - 127 = E的真实值,再将M前加上第一位的1

2.E全为0

E的真实值直接为1 - 127(double: 1-1023)= - 126

有效数字M不再加上第一位的1,而是还原为 0.xxxxxx 的小数

这样做是为了表示 +0,以及一个接近于 0很小的数字。

3.E全为1

如果有效数字M全为0,表示无穷大(正负取决于符号位 s)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值