12.1数据与文字的表示方法2.1.1数据格式选择计算机数的表示方式时,需考虑以下几个因素:(1)要表示的数的类型(小数,整数,实数和复数).(2)可能遇到的数值范围;(3)数值精确度;(4)数据存储和处理所需要的硬件代价。2计算机中常用的数据表示格式:两种定点格式,浮点格式。定点格式:数值范围有限,处理硬件比较简单。浮点格式:数值范围很大,处理硬件比较复杂。1.定点数的表示方法定点格式:约定机器中所有数据的小数点位置固定不变的。小数点就不再使用记号“·”来表示。小数点位置固定在哪一位都可以,通常将数据表示成纯小数或纯整数。3例如:用一个n+1位字来表示一个定点数X,其中一位x0用来表示数的符号,其余位数代表它的量值。符号位x0放在最左位置,数值0和1分别代表正号和负号。对于任意定点数x=x0x1x2…xn-1xn,在定点机中可表示为如下形式:x0.x1x2…xn-1xn.符号量值(尾数)4如果数X表示的是纯小数,小数点位于x0和x1之间。当x1x2…xn各位均为0时,数X的绝对值最小,|X|min=0;当各位均为1时,X的绝对值最大,|X|max=1-2-n=0.111...111故数的表示范围:0≤|x|≤1-2-n=0.111…111纯小数(2.1)如数C表示的是纯整数,小数点位于最低位CN的右边此时数X的表示范围:0≤|x|≤2-n-1=111…111纯整数(2.2)目前计算机中多采用定点纯整数表示,将定点表示的运算简称为整数运算。52.浮点数的表示方法电子的质量(9×10-28克)和太阳的质量(2×1033克)相差甚远,在定点计算机中无法直接来表示这个数值范围。要使它们送入定点计算机进行某种运算,必须对它们分别取不同的比例因子,使其数值部分绝对值小于是1.9×10-28=0.9×10-272×1033=0.2×1034这里的比例因子10-27和1034要分别存放在机器.某个存单元中,便于以后对计算结果按这个比例增大。要占用一定的存储空间和运算时间。6计算机中还可以这样来表示数据:把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示。这种把数的范围和精度分别表示的方法,相当于数的小数点位置随比例因子的不同而在一定范围内可以自由浮动,所以称为浮点表示法。任意一个十进制数N写成:N=10E.M(2.3)7在计算机中一个任意进制数N可以写成:N=Re.m=R士e*士m(2.4)m称为浮点数的尾数,是一个纯小数。e是比例因子的指数,称为浮点的指数.是一个整数。比例因子的基数R对二进计数制的机器是一个常数,一般规定R为2,8和16。在机器中表示一个浮点数时:一是要给出尾数,用定点小数形式表示。尾数部分给出有效数字,决定了浮点数的表示精度。二是要给出指数,用整数形式表示,常称为阶码.阶码指明小数点在数据中的位置,决定了浮点数的表示范围。浮点数也要有符号位。8ESE1E2…EmMSM1M2…Mn阶符阶码数符尾数一个机器浮点数应当由阶码和尾数及其符号位组成:9为便于软件移植,按照IEEE754的标准,32位浮点数的标准格式为:313023220SEM32位浮点数1064位标准格式浮点数:636252510SEM32位浮点数和64位浮点数,规定基数R=2基数2是固定常数,不必用显示方式来表示它1132位的浮点数中:S是浮点数的符号位,占1位,安排在最高位,S=0表示正数,S=1表示负数。M是尾数,放在低位部分,占用23位,用小数表示,小数点放在尾数域的最前面。E是阶码,占用8位,阶符采用隐含方式,采用移码方法来表示正负指数。移码方法对两个指数大小的比较和对阶操作都比较方便,阶码域值大者其指数值也大。采用这种方式时,将浮点数的指数真值e变成阶码E时,应将指数e加上一个固定的偏移值127(01111111),E=e+127。12一个规格化的32位浮点数X的真值可表示为:x=(-1)S×(1.M)×2E-127e=E-127(2.5)尾数域表示的值是1.M规格化的浮点数的尾数域最左位(最高有效位)总是1,故这位经常不存储,认为隐藏在小数点的左边.例:8位二进制补码与移码之间的关系为:[X]移=128+[X]补0.1M×2E=(1.M)×2-1×2E+128=(1.M)×2E+128-1=(1.M)×2E+127对于尾数,当取绝对值且已经规格化后,其形式一定为0.1M2M3M4…Mn,显然仅存储M2M3M4…Mn可以节约存储位。0.1M2M3M4…Mn=1.M2M3M4…Mn×2–1•阶码真值和移码关系的说明(对于8位阶码)由补码和真值的关系知:[E]移码=[E]补码+27=[E]补码+128754表示真值(-1)s(0.1M)2e(-1)s(1.M)2e+1282-1=(-1)s(1.M)2e+127•对754-32标准尾数的说明1464位浮点数中符号位1位,阶码域11位,尾数域52位,指数偏移值是1023规格化的64位浮点数X的真值为:x=(-1)S×(1.M)×2E-1023e=E-1023(2.6)15若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是惟一的。例如:0.5可以表示成0.05×101,50×10-2等。当尾数的值不为0时,其绝对值应≥0.5尾数域的最高有效位应为1要修改阶码同时左右移小数点的办法使其变成这一要求的表示形式,这称为浮点数的规格化表示。16当一个浮点数的尾数为0,不论其阶码为何值,或者当阶码的值遇到比它能表示的最小值还小时,不管其尾数为何值,计算机都把该浮点数看成零值,称为机器零。17假设:机器中的数由8位二进制数表示(包括符号位)定点机中这8位全部用来表示有效数字(包括符号)在浮点机中若阶符阶码占3位,数符尾数占5位。只考虑正数值,定点机小数表示的数的范围:0.00000000到0.11111111相当于十进制数的0到127/128浮点数所能表示的数的范围:2-11×0.0001到211×0.1111相当于十进制数的1/128到7.5显然,都用8位,浮点机能表示的数的范围比定点机大得多。18一台计算机中采用定点表示还是浮点表示,要根据计算机的使用条件来确定。一般在高档微机以上的计算机中同时采用定点、浮点表示,由使用者进行选择。单片机中多采用定点表示。19【例1】若浮点数X的二进制存储格式为(41360000)16求其32位浮点数的十进制值。解:将16进制数展开后,得二制数格式为:01000001001101100000000000000000S阶码(8位)M尾数(23位)指数e=阶码—127=10000010—01111111=00000011=(3)10包括隐藏位1的尾数1.M=1.01101100000000000000000=1.011011于是有x=(—1)S×1.M×2e=+(1.011011)×23=+1011.011=(11.375)1020【例2】将十进制数20.59375转换成32位浮点数的二进制格式来存储。解:首先分别将整数和分数部分转换成二进制数:20.59375=10100.10011然后移动小数点,使其在第1,2位之间10100.10011=1.010010011×24e=4于是:S=0,E=4+127=131,M=010010011得到32位浮点数的二进制存储格式为:01000001101001001100000000000000=(41A4C000)16213.十进制数串的表示方法大多数通用性较强的计算机都能直接处理十进制形式表示的数据。十进制数串在计算机内有两种表示形式:(1)字符串形式:一个字节存放一个十进制的数位或符号位.(2)压缩的十进制数串形式:一个字节存放两个十进制的数位。每个数位占半个字节(4个二进制位)22用压缩的十进制数串表示一个数,要占用主存连续的多个字节。其值可用二---十编码(BCD码)或数字符的ASCII码的低4位表示。符号位占半个字节并放在最低数字位之后,用12(C)表示正号,用13(D)表示负号规定数位加符号位之和必须为偶数当和不为偶数时,应在最高数字位之前补一个0。23例如:123C0001001000111100012D0000000100101101(+123)(-12)24每一个小框内给出一个数值位或符号位编码值(用十六进制形式给出).符号位在数字位之后。要指明一个压缩的十进制数串,要给出它在主存中的首地址和数字位个数.(不含符号位),又称位长,位长为0的数其值为0。十进制数串表示法的优点:位长可变,许多机器中规定该长度从0到31,有的甚至更长。254.自定义数据表示在传统的计算机体系结构中,用指令本身来说明操作数据的类型。定点法表示操作数是纯小数或纯整数;浮点加法表示操作数是浮点数;十进制加法表示操作数是BCD数。由于操作数据类型不同,要设三种不同的指令(操作码)来加以区分。自定义数据表示:用数据本身来说明数据类型。表示形式:有两种标志符数据表示和描述符数据表示。26要求对每一个数据都有附加标志符,格式如下:标志符数据标志符指明后面的数据所具有的类型,如整数,浮点数、BCD数、字符串等。标志符数据表示的优点:能简化指令系统,便于程序调试和查错.标志符数据表示的缺点:数据区域占用的存储空间增加,指令执行的速度减慢。标志符数据表示:27描述符数据表示:主要用来描述多维结构的数据类型.如向量、矩阵、记录等。格式为:描述符标志位特征标记数据块长度数据块起始地址描述符标志位部分:指明这是一个数据描述符;特征标记部分:指明数据的各种特征;长度部分:指明数组中元素个数;起始地址部分:指明数据块的首地址。28标志符与描述符表示的区别:3点(1)标志符与每个数据相连,二者合起来存放在一个存储单元,而描述符要和数据分开存放。(2)描述符表示中,先访问描述符,后访问数据,至少增加一次访存。(3)描述符是程序的一部分,而不是数据的一部分。292.1.2数的机器码表示1.问题?计算机中对数据进行运算操作时,符号位如何表示呢?是否也同数值位一道参加运算操作呢?如参加,会给运算操作带来什么影响呢?2.解决:把符号位和数值一起编码来表示相应的数。如原码、补码、反码、移码等。为了区别一般书写表示的数和机器中这些编码表示的数,通常将前者称为真值,后者称为机器数或机器码。301.原码表示法定点小数的原码形式为xo.x1x2…xn,原码表示的定义:x1>x≥0[x]原=(2.7)1–x=1+|x|0≥x>-1式中[x]原机器数,x是真值。例如,x=+0.1001,[x]原=0.1001x=-0.1001,[x]原=1.100131一情况情况下,对于正数x=+0.x1x2…xn,有[x]原=0.x1x2…xn对于负数x=-0.x1x2…xn,有[x]原=1.x1x2…xn对于0,原码机器中往往有“+0”、“-0”之分有两种形式:[+0]原=0.000…0[-0]原=1.000…032定点整数的原码形式为xox1x2…xn,原码表示的定义:x2n>x≥0[x]原=(2.8)2n–x=2n+|x|0≥x>-2n采用原码表示法简单易懂.最大缺点:运算复杂。因为当两数相加时,如果是同号则数值相加;如果是异号则要进行减法。33在进行减法时,要比较绝对值的大小,然后大数减去小数,最后要给结果选择恰当的符号。为了解决这些矛盾,人们找到了补码表示法。342.补码表示法以钟表对时为例说明补码的概念。假设:现在的标准时间为4点正,有一只表已经7点了,为了校准时间,可以采用两种方法:一是将时针退7-4=3格一是将时针向前拨12-3=9格这两种方法都能对准到4点,减3和加9是等价的。就是说9是(-3)对12的补码,用数学公式表示为-3=+9(mod12)mod12的意思就是12为模数,这个“模”表示被丢掉的数值.上式在数学上称为同余式。35上例中7-3和7+9(MOD12)等价,原因就是表指针超过12时,将12自动丢掉,最后得到16-12=4。同样,以12为模时-4=+8(mod12)-5=+7(mod12)从这里得到一个启示,就是负数用补码表示时,可