电气和电子工程师协会(IEEE)已定义了几种存储浮点数的标准。这里简述其中两种最长用的--单精度和双精度。
介绍单精度、双精度之前,需要介绍余码系统。
余码系统
尾数可以作为无符号数存储。指数(即显示多少位小数点应该左移或右移的幂次)是有符号的数。尽管这可以用二进制补码表示法来存储,但一种被称为余码系统的新的表示法取而代之。在该余码系统中,正的和负的整数都可以作为无符号数存储。为了表示正的或负的整数,一个正整数(称为一个偏移量)加到每个数字中,将它们统一移到非负的一边。这个偏移量的值是2m-1-1,m是内存单元存储指数的大小。
例题:
我们可以用4位存储单元在数字系统中表示16个整数。使用一个单元作为0,分开其他15个可以在-7~8范围表示的整数,如下图示。在该范围增加7个单位到每个整数中,可以统一把所有整数向后移,使其均为整数而无需改变这些整数的相对位置。如图,新系统称为余7,或者偏移量为7的偏移表示法。
好的,铺垫到此为止。
单精度格式采用总共32位来存储一个浮点表示法的实数。符号占用1位(0为正,1为负),指数占用8位(使用偏移量127),尾数使用23位(无符号数)。该标准有时称为余127码(Excess_127),因为偏移量是127。
双精度格式采用总共64位来存储一个浮点表示法的实数。符号占用1位(0为正,1为负),指数占用11位(使用偏移量1023),尾数使用52位。该标准有时称为余1023码(Excess_1023),因为偏移量是1023。
对照上图,使用以下步骤,一个实数可以存储为IEEE标准浮点数格式:
(1)在S中存储符号(0或1);
(2)将数字转化为二进制;
(3)规范化(为了使表示法的固定部分统一,科学计数法(用于十进制)和浮点表示法(用于二进制)都在小数点左边使用了唯一的非零数码,这称为规范化);
(4)找到E和M的值;
(5)连接S、E、M。
例题:
写出十进制数5.75的余127码(单精度)表示法。
解:
(1)符号为正,所以S=0;
(2)十进制转换为二进制:5.75=(101.11)2;
(3)规范化:5.75=(101.11)2=(1.0111)2×22;
(4)E=2+127=129=(10000001)2,M=(0111)2;
(5)存储在计算机中的数字为
01000000101110000000000000000000