首先简单了解一下什么是IEEE754,电气和电子工程师协会IEEE为了解决计算机浮点数的存储、运算、表示等问题而推出了IEEE754标准,所以呢,以下概念和码制及规则等问题想要究其为何要这样表示,就需要结合数电、计算机组成原理、以及一些汇编的知识去合理解释,在这里不做过多的说明。(好吧真相是其实我也不太清楚其中的精妙之处)
那么,浮点型数的特殊之处在于哪里呢,为什么存储它需要一套与纯整数和纯小数不同的标准化规则呢?
这是为了把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,而浮点型数的小数点位置随比例因子的不同而在一定范围内自由浮动,但计算机中只有1和0两种状态,无法去表示小数点的位置,这让浮点型数的存储和表示好像变得不那么容易,也就有了IEEE754.
所以IEEE754将浮点型小数变化为一种固定的格式,将用一种固定化模式去记录小数点的位置。
想要转化为IEEE754标准一定要明白真值、反码、补码、移码等概念,而且要对进制转化有一定的熟练,接下来一一介绍
真值:所谓真值,其实就是我们数学意义上理解的带有正负号的数字;
原码:原码就不用说太多了,就无非是要将一个非二进制数转化为二进制数,并且如果是负数的话记得把最高位写为1.
反码:老生常谈,正数的反码是他本身,负数的反码是在其原码的基础上,符号位不变,其余各位取反。
补码:正数的补码还是本身,负数的补码是在原码基础上除符号位都取反,然后进1
移码:在二进制存储中,补码的符号位取反即是移码,由于浮点数的特殊性,于是引入了移码用来解决浮点数中阶码的问题。
话不多说,下面我们直接来介绍IEEE754标准。
类比十进制数中的科学计数法,我们接下来也采用类似的数据形式将二进制数变为如下的规格化表示:
而在计算机存储中,一个浮点数由符号(sign)、尾数(significand)和阶码(exponent)三部分组成的。
即符号S决定这个数是负数(s=1)还是正数(s=0),而对于数值0的符号位解释,作为特殊情况处理;
尾数M决定浮点数的精度,它是一个二进制小数;
阶码E的作用是对浮点数加权,这个权重是2的E次幂(可能是负数),它决定浮点数的取值范围。
规格化地,一个浮点数a由两个数m和e来表示:a = m × b^e。在任意一个这样的系统中,我们选择一个基数b(二进制中b为2)和精度p(计算机分为32/64位)。m(即尾数)是形如±d.ddd…ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。如果m的第一位是非0整数,m称作规格化的。在规格化中,我们一般都使用一个单独的符号位(s 代表+或者-)来表示正负,这样m必须是正的,则规格化形式是1.M *2^e。M为尾数,e是指数。而上述文章中的E与e不同,在32位系统中E=e+127,在64位系统中E=e+1023,E是含阶符的阶码。
32/64位浮点数的规格化具体如下图表示:
在最后呢,附上老师的两道例题,结合例题食用更佳喔!