化繁为简:浮点数的存储

您所在的位置:网站首页 化繁为简的作用 化繁为简:浮点数的存储

化繁为简:浮点数的存储

2023-06-08 22:38| 来源: 网络整理| 查看: 265

首先搞清楚两个小问题:

1.小数的二进制表示: 

        十进制和二进制本质上没有区别,但是二进制浮点数不能完全精确表示十进制浮点数,因为如果将二进制浮点数的小数点向右移动一位,会变成原来的两倍。但是,十进制浮点数同样移动一位小数点,前后却是十倍关系。

        例如:二进制数10.11,换算成十进制的话,整数位的10等于十进制的2,小数位的0.11等于十进制的0.75。也就是说二进制0.1等于十进制0.5,二进制0.01等于十进制0.25,以此类推。

2.二进制科学计数法:

        直接举例:二进制浮点数1011.001,科学计数法转换为1.011001✖2^3,小数点每左移一位,就变成原来的二分之一,所以科学计数法下的二进制数是a✖2^n的形式 。

接下来再结合计算机中浮点数的格式 计算机是根据科学计数法存浮点数的

(那些SEM什么的看着是真**烦)

SE E E E E E E EM.......(23个M)

以二进制浮点数数1011.001为例

科学计数法是1.011001✖2^3

S是符号位,占第一个bit位,S存的是该数的正负号,S是1则该浮点数为负,S是0则该浮点数为正;

E什么位都不是,占8个bit位,E存的是乘号右边的2^3,但实际上计算机只把3的二进制存进去了,只存了指数,因为底数固定为2不需要存;

M占23个bit位,M存的是乘号左边的1.011001,但实际上计算机只把小数点后的011001存进去了,因为无论要存什么数,小数点左边固定只有一个1,也不需要存;

但是这有问题了

比如我要存个0.00101,科学计数法出来是1.01✖2 ^ - 3,我指数是负数,君又该如何应对?

我知道你很急(

先人想出了一个办法,引入一个中间值01111111,换算成十进制就是127

原理很简单,一堂考试满分100,为了让负分可以存在,我设置一个标准线为50,你考49,我就可以记为-1;你考51,我就可以记为1

所以E区域存 - 3 其实显示的是127 - 3,也就是01111100

所以1011.001存在电脑里其实是这样省儿的:

0 10000010 00000000000000000011001

这是我(人生中)的第1篇博客



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3