计算机中浮点数存储方式

计算机中存储小数有两种方式,分别是定点数浮点数

1. 定点数

定点数就是小数点的位置固定不变的数,小数点的位置通常有两种约定方式:定点整数定点小数

定点整数就是纯整数,因为小数点在最低有效数值位之后。定点小数的小数点在最高有效数值之前。这里对定点数暂时不做详解。

2. 浮点数

2.1 简单概述

计算机中小数采用浮点数方式保存,采用工业标准IEEE754标准。一个浮点数的表现形式如下:
( − 1 ) S 2 E ( b 0 b 1 b 2 b 3 . . . b n − 1 ) (-1)^S2^E(b_{0}b_{1}b_{2}b_{3}...b_{n-1}) (1)S2E(b0b1b2b3...bn1)
其中(-1)^S是浮点数的正负符号,S为0表示正数,S为1表示负数;
E为指数(阶码),用移码表示;
b0b1b2b3…bn-1是尾数,长度为n位,用原码表示。

假设用一个4字节(32bit)表示一个浮点数,每个内容段所占的bit位数如下所示,从左到右bit位是由高到低。

阶符(符号位)阶码尾数
1bit8bit23bit

2.2 转换案例

这里直接使用实际案例转换进行讲解:

2.2.1 176.1875表示为单精度浮点数(4字节)

  1. 分别将176.1875的整数部分和小数部分转成二进制
    176.1875 − − − > 10110000.0011 176.1875 ---> 10110000.0011 176.1875>10110000.0011

转换之后的数据叫做非规格化的数据

  1. 将非规格化数据转成规格化数据
    10110000.0011 − − − > 1.01100000011 ∗ 2 7 10110000.0011 ---> 1.01100000011 * 2^7 10110000.0011>1.0110000001127
    规格化的数据就是将数据使用 1.xxxxx * 2^x 的科学计数方式表示出来。

通过得到的规格化的值,已经可以确认精确位为01100000011,尾数为23bit,所以还需要补上其余的0,得到尾数就是01100000011000000000000

  1. 确定阶码和符号位

由上面可以知道指数为7,即阶码真值为7。要求得阶码,遵循该公式:++阶码 = 阶码真值 + 偏置值++

单精度的浮点数的偏置值是127,双精度的偏置值是1023,至于为什么后面解释。

所以这里的阶码 = 7 + 127 = 134 = 10000110,因为为正数,所以符号位为0。

  1. 浮点数表示

根据上面的计算可以得到阶码、符号和尾数。只要将对应的数填到对应的位置,即可得到如下值

阶符(符号位)阶码尾数
01000011001100000011 000000000000

如果使用整数十六进制方式打印,即为0x43303000 (0100 0011 0011 0000 0011 0000 0000 0000 )

2.2.2 0.1875表示为双精度浮点数(4字节)

同样使用上面的4个步骤:

  1. 整数和小数部分转为二进制

0.1875 − − − > 0.0011 0.1875 ---> 0.0011 0.1875>0.0011
2. 转为规格化数据

0.0011 − − − > 1.1 ∗ 2 − 3 0.0011 ---> 1.1 * 2^{-3} 0.0011>1.123
可确定尾数为1 0000000000000000000000

  1. 确定阶码和符号位

阶码 = -3 + 127 = 124 = 01111100,因为是正数,所以符号位为0
使用浮点数表示为:

阶符(符号位1bit)阶码(8bit)尾数(23bit)
00111110010000000000000000000000

十六进制表示就是:0x3e400000

2.3 一些问题

1. 单精度为什么偏置值(bias)是127?双精度偏置为什么是1023?

float中 bias = 2^(k-1) - 1,k为阶码的个数=8 ,所以bias = 127

此时 E = e - bias(e是无符号的原码)

= (0000 0001,1111 1110)- 127

= (1-127,254-127)

= (-126, 127)

如若 bias = 128,则最终E = (-127, 126)

总结:bias = 127时候,E的最大值比bias=128大,此时浮点数表示的最大值就会更加大一些。

参考自 https://blog.csdn.net/weixin_43891234/article/details/114693495

2. IEEE754浮点数阶码为什么需要偏置bias

a) 使指数以无符号形式存储

b) 便于浮点数加减运算时候对阶操作

参考自 https://blog.csdn.net/weixin_43891234/article/details/114692825

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值