化繁为简:浮点数的存储 |
您所在的位置:网站首页 › 化繁为简的作用 › 化繁为简:浮点数的存储 |
首先搞清楚两个小问题:
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 |