快速了解—IEEE754标准32位浮点数的转换

IEEE754标准的介绍网上有好多,这里就不过多介绍了,这篇文章主要讲的是浮点数转换的方法,大家认真看马上就能掌握了

但是我们还需需要了解

什么是IEEE754标准的32位浮点数

计算机存储的方式主要有两种,分别是定点数和浮点数

那存储的内存就那么多,怎么样才能存储更多的位数呢?

科学家们就很聪明,通过科学计数法来创造了浮点数的存储

好,说了那么多,感兴趣了了解一下就行

那么需要我们记住的是,定点数存储的范围小,但是精确;浮点数存储的范围更大,但是不精确

浮点数的表示

一个浮点数 (Value) 的表示其实可以这样表示:

也就是浮点数的实际值,等于符号位(sign bit)乘以指数偏移值(exponent bias)再乘以分数值(fraction)。

哈哈,有点难,我也看不懂

那我们看这个

我们可以这样理解,任何一个二进制数,都可以表示为

这个要怎么理解呢,看上面那幅图十进制的1.75转化为二进制的表示

当然上面那幅图指数是二进制,实际上我们写的时候写成十进制可能更好去理解,那

十进制是   小数X10的几次方

二进制当然就是   小数X2的几次方

理解的方式自然也是一样的,乘上正数次方,小数点向右移动,乘上负数次方,小数点向左移动。

储存方式

我们有三十二位地址,也就是4byte(32bit)

如果大家感兴趣后面单独出一个文章来讲32位和64位到底是什么意思

那该如何存储呢?

IEEE754规定:在32位浮点数中,符号位为第一位,指数位是后面八位,小数位是后面的23位


符号位

0为“+”,1为“-”,也就是说第一位是0,就说明这个数是个正数,第一位是1,就说明是负数

如何去记呢

很简单,因为0就说明什么也没有,所以如果是正数的话我们不会过多去关注,是负数我们才需要去标记一下,也就是在前面加上1.


指数位(阶码)

在 IEEE 754 浮点数标准中,阶码是用移码表示的,移码的定义:移码 = 真值 + 偏置值

在 IEEE 754 标准中移码偏置值是  2^(n-1)-1

这个是什么意思呢,其实也很简单,我们需要的是真值,根据上面的式子很容易就能得出:

真值 = 移码 - 偏置值

所以在三十二位浮点数中,阶数(指数)一共有八位,所以真正的指数就可以表示为

真正的指数 = 32位浮点数从前往后第二位到第九位的二进制数 - 2^(8-1)-1

再算一下

指数 = 八位阶数 - 127


小数位(尾数)

小数位,大家可以思考一下,如果必须开头都是1,那么我们是不是可以从第二位开始储存,第一位默认为1,以此来获得更大的存储空间呢?

在 IEEE 754 浮点数标准中,尾数码部分采用原码表示,且尾数码隐含了最高位 1,在计算时我们需要加上最高位1,即 1.M


IEEE754标准的32位浮点数的转换

介绍了那么多,接下来我们来一起看看实战的例子

IEEE754标准格式存储的十六进制浮点数转换成十进制的数值

41360000

首先,我们先把十六进制转化为2进制,十六进制,每一位都能转化成4位二进制,就比如说4能转化成0010,1能转化成0001,分别写出来连起来就好

0 100 0001 0 011 0110 0000 0000 0000 0000

我们按照上面讲的,把32位浮点数划分为1、8、23,三组数字,然后一组一组看

符号位:0 

表示32位浮点数是一个正数

指数位(阶码):1000 0010

转化成十进制,2的7次方加上2的1次方,为130

注意:此时的130为移码,指数的真值移码减去偏置值

也就是 130 - 127 = 3

小数位(尾数):011 0110 0000 0000 0000 0000

因为尾数储存的时候省略了1,所以这个数应该看作

1.011011

好的,那么这个浮点数三个部分我们都知道了,那么组合起来就是这个数的十进制数值

(-1)^0 \times (1.011011)_2 \times 2^3

理解起来很简单,就是正数,二进制数乘上2的3次方,和科学计数法一样,正3次方,小数点往后移动三位就行,表示出来就是

1011.011

那么,转化为十进制

2^3 + 2^1 + 2^0 + 2^{-2} + 2^{-3}  =  11.375

所以11.375就是最终的结果

十进制化为二进制浮点数表示就是把整体逻辑反过来了,这里就不举例子了


特殊情况

形式

指数

小数部分

0

0

非规约形式

0

非0

规约形式

1到2^e - 2

任意

无穷

2^e - 1

0

NaN

2^e - 1

非零

感谢大家的阅读!!

  • 51
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J.Pei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值