数据格式,计算机中数据格式详细介绍计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式。一般来说,定点格式容许的数值范围有限,但要求的处理硬件比较简单。而浮点格式容许的数值范围很大,但要求的处理硬件比较复杂。1.定点数的表示方法定点表示:约定机器中所有数据的小数点位置是固定不变的。由于约定在固定的位置,小数点就不再使用记号“.”来表示。通常将数据表示成纯小数或纯整数。定点数x=x0x1x2…xn 在定点机中表示如下(x0:符号位,0代表正号,1代表负号):

纯小数的表示范围为(x0x1x2…xn 各位均为0时最小;各位均为1时最大)0≤|x|≤1-2-n   (2.1)

纯整数的表示范围为0≤|x|≤2n-1 (2.2)目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算。

2.浮点数的表示方法电子的质量(9×10-28克)和太阳的质量(2×1033克)相差甚远,在定点计算机中无法直接来表示这个数值范围.要使它们送入定点计算机进行某种运算,必须对它们分别取不同的比例因子,使其数值部分绝对值小于1,即:9×10-28=0.9×10-272×1033=0.2×1034这里的比例因子10-27 和1034要分别存放在机器的某个存储单元中,以便以后对计算结果按这个比例增大。显然这要占用一定的存储空间和运算时间。因此得到浮点表示法如下:浮点表示法:把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,这种把数的范围和精度分别表示的方法,数的小数点位置随比例因子的不同而在一定范围内自由浮动。任意一个十进制数N可以写成:N = 10E.M(2.3)同样,在计算机中一个任意进制数N可以写成N=Re.M   (2.4)M:尾数,是一个纯小数。e:比例因子的指数,称为浮点数的指数,是一个整数。R:比例因子的基数,对于二进计数值的机器是一个常数,一般规定R为2,8或16。

一个机器浮点数由阶码和尾数及其符号位组成(尾数:用定点小数表示,给出有效数字的位数决定了浮点数的表示精度;阶码:用整数形式表示,指明小数点在数据中的位置,决定了浮点数的表示范围。):

为便于软件移植,按照 IEEE754 标准,32位浮点数和64位浮点数的标准格式为:

32位的浮点数中,S:浮点数的符号位,1 位,0表示正数,1表示负数。M:尾数,23位,用小数表示,小数点放在尾数域的最前面。E:阶码(8位),阶符采用隐含方式,即采用移码方式来表示正负指数。移码方法对两个指数大小的比较和对阶操作都比较方便,因为阶码域值大者其指数值也大。采用这种方式时,将浮点数的指数真值e变成阶码E时,应将指数e加上一个固定的偏移值127(01111111),即Ee+127。IEEE754 标准中,一个规格化的32位浮点数x的真值可表示为x=(-1)s×(1.M)×2E-127   e=E-127  (2.5)一个规格化的64位浮点数x的真值为x=(-1)s×(1.M)×2E-1023   e=E-1023   (2.6)同一个浮点数的表示方法不是唯一的,如:(1.75)10=1.11×20(IEEE规格化表示)=0.111×21(传统规格化表示)=0.0111×22=0.00111×23

为提高数据的表示精度,当尾数的值不为 0 时,尾数域的最高有效位应为1,否则以修改阶码同时左右移小数点的办法,使其变成这一表示形式,这称为浮点数的规格化表示。当浮点数的尾数为0,不论其阶码为何值,或者当阶码的值遇到比它能表示的最小值还小时,不管其尾数为何值,计算机都把该浮点数看成零值,称为机器零。当阶码E 为全0且尾数M也为全0时,表示的真值x为零,结合符号位S为0或1,有正零和负零之分。当阶码E 为全1且尾数M 为全0时,表示的真值x 为无穷大,结合符号位S为0或1,也有+∞和-∞之分。这样在32位浮点数表示中,要除去E 用全0和全1(255)10表示零和无穷大的特殊情况,指数的偏移值不选128(10000000),而选127(01111111)。对于规格化浮点数,E的范围变为1到254,真正的指数值e 则为-126到+127。因此32位浮点数表示的绝对值的范围是10-38~1038(以10的幂表示)。浮点数所表示的范围远比定点数大。一台计算机中究竟采用定点表示还是浮点表示,要根据计算机的使用条件来确定。一般在高档微机以上的计算机中同时采用定点、浮点表示,由使用者进行选择,而单片机中多采用定点表示。[例1] 若浮点数的754标准存储格式为(41360000)16,求其浮点数的十进制数值。[解:]

将十六进制数展开后,可得二进制数格式为

指数e=阶码-127=10000010-01111111=00000011=(3)10包括隐藏位1的尾数1.M=1.011 0110 0000 0000 0000 0000=1.011011于是有:x=(-1)s×1.M×2e=+(1.011011)×23=+1011.011=(11.375)10[例2] 将(20.59375)10转换成754标准的32位浮点数的二进制存储格式。[解:]首先分别将整数和分数部分转换成二进制数:20.59375=10100.10011然后移动小数点,使其在第1,2位之间10100.10011=1.010010011×24 e=4于是得到:S=0, E=4+127=131,M=010010011最后得到32位浮点数的二进制存储格式为:0100 0001 1010 0100 1100 0000 0000 0000=(41A4C000)16

3.十进制数串的表示方法目前,大多数通用性较强的计算机都能直接处理十进制形式表示的数据。十进制数串在计算机内主要有两种表示形式:(1)字符串形式字符串形式:一个字节存放一个十进制的数位或符号位。为了指明这样一个数,需要给出该数在主存中的起始地址和位数(串的长度)。(2)压缩的十进制数串形式压缩的十进制数串形式:一个字节存放两个十进制的数位。它比前一种形式节省存储空间,又便于直接完成十进制数的算术运算,是广泛采用的较为理想的方法。用压缩的十进制数串表示一个数,也要占用主存连续的多个字节。每个数位占用半个字节(即4个二进制位),其值可用二-十编码(BCD码)或数字符的ASCII码的低4位表示。符号位也占半个字节并放在最低数字位之后,其值选用四位编码中的六种冗余状态中的有关值,如用12(c)表示正号,用13(d)表示负号。

在上述表示中,每一个小框内给出一个数值位或符号位的编码值(用十六进制形式给出),符号位在数字位之后。 前两个小框占一个字节,后两个小框占一个字节。与第一种表示形式类似,要指明一个压缩的十进制数串,也得给出它在主存中的首地址和数字位个数(不含符号位),又称位长,位长为0的数其值为0。十进制数串表示法的优点是位长可变,许多机器中规定该长度从0到31,有的甚至更长。

4.自定义数据表示在传统的计算机体系结构中,用指令本身来说明操作数据的类型。如定点加法表示操作数是纯小数或纯整数;浮点加法表示操作数是浮点数;十进制加法表示操作数是BCD数。由于操作数据类型不同,要设三种不同的指令(操作码)来加以区分。自定义数据表示则用数据本身来说明数据类型。表示形式有两种,即标志符数据表示和描述符数据表示。标志符数据表示要求对每一个数据都附加标志符,其格式如下:

其中标志符指明后面的数据所具有的类型,如整数、浮点数、BCD数、字符串等。标志符数据表示的优点是能简化指令系统,便于程序调试和查错,缺点是数据区域占用的存储空间增加,并使指令执行的速度减慢。描述符数据表示主要用来描述多维结构的数据类型,如向量、矩阵、记录等。其格式为:

描述符标志位部分指明这是一个数据描述符;特征标记部分指明数据的各种特征;长度部分指明数组中元素个数;起始地址部分指明数据块的首地址。标志符与描述符表示的区别是:(1)标志符与每个数据相连,二者合起来存放在一个存储单元,而描述符要和数据分开存放。(2)描述符表示中,先访问描述符,后访问数据,至少增加一次访存。(3)描述符是程序的一部分,而不是数据的一部分。