浅谈浮点数的存储方式

    在谈浮点数的存放方式之前,我们先来复习一些有关于位和字节的基本的知识:

    我们知道1字节=8位(1Byte=8bit),也就是说一个字节里面有八个位置,用来存放0和1这两种状态。而浮点数有float和double两种类型,我们先说比较简单的float类型,因为float类型只有四个字节,也就是一共有32位(4*8)。就是有32个位置来存放0和1.

    复习完这些知识,我们在来看一下浮点数的表示方法

    数字有正有负,同样的,浮点数也不例外。其最高位用来保存符号,这样就剩下了31位,那其他的信息是怎么保存的呢?我们来看一张图片就了解了。


    我们以12.5作为例子,12.5转换为二进制为1100.1 再将它表示为科学记数法(方法和十进制一样)为1.1001*2^3  其中有两个数字需要保存就是小数点后面的数字1001,以及指数3  。这时候有的人可能会问了,为什么不保存小数点前面的1呢?这是因为所有的数字在用科学记数法表示的时候,其前面都是1,你也可以自己写一些数字来验证一下。比如下面的0.125,写成科学记数法就是1*2^-3,他的小数点右边也是1,左边都是0所以没有写出。

    我们首先需要保存的是指数位,指数位有正有负,但是我们已经有了最前面的整个数字的符号位,所以这时候如果再加一个符号位的话就会显得有点冗余。指数位最大有一个字节,总共有八位,最多可以保存256个数字,即0~255,但是又不能保存负数,于是我们可以这样来保存其指数位,将0~255最中间的数字127看作其中间节点(就相当于坐标轴上面的坐标原点即0)这样再来看其指数的话就容易多了。要保存3,只需要给127(相当于坐标原点0)加上3就好了即130,如果要保存的是-3,这时候只需要给127减去3就好了,道理就和上面类似。所以这时候我们就需要在指数位上面保存的是130,将130转换为二进制为10000010。

    指数位保存好了,接下来就直接保存小数点右边的数字就好了,也就是在剩下的23位里面保存1001,空余的位数上面补上0就好了,一定要将0补在右边,在这里保存的是小数,小数是在后面加0.

    这样,浮点数的保存也就保存完了。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页