1、 第第1 1章章 数据在计算机中的表示与运算方法数据在计算机中的表示与运算方法 本章主要内容本章主要内容n计算机中几种常用进位计数制及不同进位制数之间的计算机中几种常用进位计数制及不同进位制数之间的转换方法;转换方法;n数据在计算机中的表示与运算方法。数据在计算机中的表示与运算方法。1.1 进位计数制进位计数制n计算机中全部信息(包括指令和数据)都是采用二进制数,计算机中全部信息(包括指令和数据)都是采用二进制数,为了书写方便,又经常采用十六进制。人们在日常生活中又为了书写方便,又经常采用十六进制。人们在日常生活中又广泛采用十进制。广泛采用十进制。n二进制、十六进制、十进制都是进位计数制。二进
2、制、十六进制、十进制都是进位计数制。1.1.1 进位计数制及其基数和权进位计数制及其基数和权n进位计数制:用一组固定的数字符号和特定的规则表进位计数制:用一组固定的数字符号和特定的规则表示数的方法。示数的方法。l基数和权基数和权l在进位计数制中,一种进位制所允许选用的基本数在进位计数制中,一种进位制所允许选用的基本数字符号的个数称为这种进位制的字符号的个数称为这种进位制的基数基数。l同一个数字符号处在不同的数位时,它所代表的数同一个数字符号处在不同的数位时,它所代表的数值是不同的,每个数字符号所代表的数值等于它本值是不同的,每个数字符号所代表的数值等于它本身乘以一个与它所在数位对应的常数,这个
3、常数叫身乘以一个与它所在数位对应的常数,这个常数叫做位权,简称做位权,简称权权(weight)。)。n不同进位制的基数不同不同进位制的基数不同 十进制:基数十进制:基数10,数字符号,数字符号09 二进制:基数二进制:基数2,数值符号,数值符号0,1n同一进制,不同数位其权值不同。同一进制,不同数位其权值不同。1.1.2 常用的进位计数制常用的进位计数制十进制十进制任何一个十进制数,都可以用一个多项式来表示:任何一个十进制数,都可以用一个多项式来表示:等式右边的表示形式,称为十进制数的等式右边的表示形式,称为十进制数的多项式表示法,多项式表示法,也叫按权展开式也叫按权展开式;等号左边的形式,称
4、为十进制的位置记数法。位置记等号左边的形式,称为十进制的位置记数法。位置记数法是一种与位置有关的表示方法,同一个数字符号数法是一种与位置有关的表示方法,同一个数字符号处于不同的数位时,所代表的数值不同,即其权值不处于不同的数位时,所代表的数值不同,即其权值不同。同。21012312.253 101 102 102 105 10 二进制二进制二进制数的基数为二进制数的基数为2,即它所用的数字符号个数只有两,即它所用的数字符号个数只有两个(个(“0”和和“1”)。它的计数进位规则为)。它的计数进位规则为“逢二进一逢二进一”。二进制数只有两种数字符号,因而便于数字系统与电二进制数只有两种数字符号,因
5、而便于数字系统与电子计算机内部的表示与存储。它的另一个优点是运算规子计算机内部的表示与存储。它的另一个优点是运算规则的简便性,而运算规则的简单,必然导致运算电路的则的简便性,而运算规则的简单,必然导致运算电路的简单以及相关控制的简化简单以及相关控制的简化。n八进制八进制 八进制数的基数八进制数的基数R8,每位可能取八个不同的数字符,每位可能取八个不同的数字符号号07中的任何一个,进位规则是中的任何一个,进位规则是“逢八进一逢八进一”。l1位八进制对应位八进制对应3位二进制位二进制l八进制:八进制:0,1,2,3,4,5,6,7l二进制:二进制:000,001,010,011,100,101,1
6、10,111十六进制十六进制十六进制数的基数十六进制数的基数R16,每位用十六个数字符号,每位用十六个数字符号0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F中中的一个表示,进位规则是的一个表示,进位规则是“逢十六进一逢十六进一”。与二进制转换时候,其每位对应与二进制转换时候,其每位对应4位二进制数。位二进制数。在编程时,为了书写方便,常用十六进制表示。在编程时,为了书写方便,常用十六进制表示。1.2 1.2 不同进位制数之间的转换不同进位制数之间的转换1.2.1 二进制数转换为十进制数二进制数转换为十进制数u按权展开,例如按权展开,例如(101011.101)2(2523212
7、02-12-3)10 (328210.50.125)10 (43.625)10u同样的方法也可将八进制数转换为十进制数。同样的方法也可将八进制数转换为十进制数。p这种用以实现数制转换的方法,称为多项式替代法。这种用以实现数制转换的方法,称为多项式替代法。1.2.2 十进制数转换为二进制数(整数部分)十进制数转换为二进制数(整数部分)n十进制数转换为二进制数:除十进制数转换为二进制数:除2取余,例如十进制数取余,例如十进制数29的转换。的转换。2 921 4余数1 (B0)72232120余数0 (B1)余数1 (B2)余数1 (B3)余数1 (B4)29D=11101B n采用采用“除除8取余
8、取余”或或“除除16取余取余”的方法,即可将一个的方法,即可将一个十进制整数转换为八进制整数或十六进制整数。十进制整数转换为八进制整数或十六进制整数。n这种数制转换的方法称为基数除法或这种数制转换的方法称为基数除法或“除基取余除基取余”法。法。可概括为:可概括为:“除基取余,直至商为除基取余,直至商为0,注意确定高、低,注意确定高、低位位”。1.2.2 十进制数转换为二进制数(小数部分)十进制数转换为二进制数(小数部分)n十进制小数转换为二进制小数十进制小数转换为二进制小数:乘乘2取整取整 例例 把0.625转换成二进制数 把0.625乘2取整0.625 21.250b-1=1 0.25 2
9、0.50b-2=00.5 2 1.0b-3=1 0.625=0.101Bn在十进制小数转换成二进制小数时,整个计算过程可能在十进制小数转换成二进制小数时,整个计算过程可能无限地进行下去,这时,一般考虑到计算机实际字长的无限地进行下去,这时,一般考虑到计算机实际字长的限制,只取有限位数的近似值就可以了。限制,只取有限位数的近似值就可以了。n上述这种数制转换方法称为基数乘法或上述这种数制转换方法称为基数乘法或“乘基取整乘基取整”法。法。可概括如下:可概括如下:“乘基取整,注意确定高、低位及有效位乘基取整,注意确定高、低位及有效位数。数。”u如果一个数既有整数部分又有小数部分,则用前述如果一个数既有
10、整数部分又有小数部分,则用前述的的“除基取余除基取余”及及“乘基取整乘基取整”结合求解。结合求解。1.2.3 任意两种进位制数之间的转换任意两种进位制数之间的转换 n为实现任意两种进位制数之间的转换(例如从为实现任意两种进位制数之间的转换(例如从P进制转进制转换成换成R进制),可以用进制),可以用“基数乘除法基数乘除法”或或“多项式替多项式替代法代法”直接从直接从P进制转换成进制转换成R进制,此时如果熟悉进制,此时如果熟悉P进进制的运算规则就可以采用制的运算规则就可以采用“基数乘除法基数乘除法”;如果熟悉;如果熟悉R进制的运算规则就采用进制的运算规则就采用“多项式替代法多项式替代法”。n有时可
11、能对有时可能对P进制与进制与R进制的运算规则都不熟悉,那么进制的运算规则都不熟悉,那么一种方便的方法就是利用十进制作桥梁。一种方便的方法就是利用十进制作桥梁。n首先将其转换为十进制,这里采用首先将其转换为十进制,这里采用“多项式替代法多项式替代法”,然后将转换为所需目标进制,这里采用然后将转换为所需目标进制,这里采用“基数乘除基数乘除法法”。1.3 二进制的算术运算与逻辑运算二进制的算术运算与逻辑运算n加法运算规则:逢二进一加法运算规则:逢二进一n减法运算规则:借一当二减法运算规则:借一当二n乘法运算规则:乘法运算规则:000,010,100,111 例如:例如:1101x1010=11011
12、10二进制的乘法可以归结为:二进制的乘法可以归结为:“加加”与与“移位移位”n除法运算:乘法的逆运算除法运算:乘法的逆运算 以二进制的乘法及减法规则实现以二进制的乘法及减法规则实现n逻辑运算:逻辑运算:或(逻辑加)、与(逻辑乘)、非(逻辑反)、异或(模或(逻辑加)、与(逻辑乘)、非(逻辑反)、异或(模2加)加)n移位运算移位运算 逻辑左移:逻辑左移:将操作数的所有位同时左移,最高位移出原操作将操作数的所有位同时左移,最高位移出原操作数之外,最低位补数之外,最低位补0。逻辑左移一位相当于无符号数乘。逻辑左移一位相当于无符号数乘2。例例如,将如,将01100101逻辑左移一位后变成逻辑左移一位后变
13、成11001010,相当于,相当于(101)102202。逻辑右移:逻辑右移:将操作数的所有位同时右移,最低位移出原操作数将操作数的所有位同时右移,最低位移出原操作数之外,最高位补之外,最高位补0。逻辑右移一位相当于将无符号数除以。逻辑右移一位相当于将无符号数除以2。例。例如,将如,将10010100逻辑右移一位后变成逻辑右移一位后变成01001010,相当于,相当于148274。n循环左移:循环左移:将操作数的所有位同时左移,并将移出的将操作数的所有位同时左移,并将移出的最高位送到最低位。循环左移的结果不会丢失被移动最高位送到最低位。循环左移的结果不会丢失被移动的数据位。例如,将的数据位。例
14、如,将10010100循环左移一位后变成循环左移一位后变成00101001。n循环右移循环右移:将操作数的所有位同时右移,并将移出的:将操作数的所有位同时右移,并将移出的最低位送到最高位。它也不会丢失被移动的数据位。最低位送到最高位。它也不会丢失被移动的数据位。例如,将例如,将10010100循环右移一位后变成循环右移一位后变成01001010。n算术移位算术移位 算术移位是把操作数当作带符号数进行移位,所以在算术移位是把操作数当作带符号数进行移位,所以在算术移位中,必须保持符号位不变算术移位中,必须保持符号位不变。否则将发生溢出。否则将发生溢出。与逻辑移位类似,算术移位可分为算术左移、算术右
15、与逻辑移位类似,算术移位可分为算术左移、算术右移、循环左移和循环右移。循环左移和循环右移的操作移、循环左移和循环右移。循环左移和循环右移的操作与前述逻辑移位时的情况相同,都是不丢失移出原操作与前述逻辑移位时的情况相同,都是不丢失移出原操作数的位,而将其返回到操作数的另一端。数的位,而将其返回到操作数的另一端。1.4 数据在计算机中的表示形式数据在计算机中的表示形式n存储原理存储原理 电子计算机实质上是一个二进制的数字系统,在机器电子计算机实质上是一个二进制的数字系统,在机器内部,二进制数总是存放在由具有两种相反状态的存储内部,二进制数总是存放在由具有两种相反状态的存储元件构成的寄存器或存储单元
16、中,即二进制数码元件构成的寄存器或存储单元中,即二进制数码0和和1是是由存储元件的两种相反状态来表示的。由存储元件的两种相反状态来表示的。另外,对于数的符号(正号另外,对于数的符号(正号“”和负号和负号“”)也只能)也只能用这两种相反的状态来区别。也就是说,只能用用这两种相反的状态来区别。也就是说,只能用0或或1来来表示。表示。1.4.1 机器数与真值机器数与真值n机器数与真值机器数与真值一个数(连同符号)在机器中加以数码化后的表示形式,一个数(连同符号)在机器中加以数码化后的表示形式,称称为为机器数机器数,而把原来的数称为机器数的,而把原来的数称为机器数的真值。真值。1.4.2 几种常见的机
17、器数形式几种常见的机器数形式n机器数形式机器数形式n原码:原码:数码序列中的最高位为符号位,符号位为数码序列中的最高位为符号位,符号位为0表示该数为正数,为表示该数为正数,为1表示该数为负数;其余有效表示该数为负数;其余有效数值部分则用二进制的绝对值表示。数值部分则用二进制的绝对值表示。例如:例如:真值x x原 0.1001 0.1001 0.1001 1.1001 1001 01001 1001 11001n0 的原码有两种表示,的原码有两种表示,以定点小数为例以定点小数为例 +0原原=0.000 0000 0原原=1.000 0000 原码表示简单直观,但运算时符号位与数值位要区原码表示简
18、单直观,但运算时符号位与数值位要区别对待,别对待,在原码表示中,符号位不是数值的一部分,在原码表示中,符号位不是数值的一部分,它们仅是人为约定(它们仅是人为约定(“0为正,为正,1为负为负”),所以符号位),所以符号位在运算过程中需要单独处理,不能当作数值的一部分在运算过程中需要单独处理,不能当作数值的一部分直接参与运算直接参与运算。n补码补码定点小数补码定义如下:定点小数补码定义如下:若定点小数的补码序列为若定点小数的补码序列为X0.X1Xn,则,则式中,式中,x 代表真值,代表真值,为补码表示的机器数为补码表示的机器数。若定点整数的补码序列为若定点整数的补码序列为 ,则,则u正数的补码是其
19、自身;正数的补码是其自身;u0的补码只有一种表示;的补码只有一种表示;u负数的补码是用模数加上该负数。负数的补码是用模数加上该负数。从原码转换为补码从原码转换为补码的变化规律为:的变化规律为:“符号位保持不变(仍为符号位保持不变(仍为1),其他各),其他各位求反,然后末位加位求反,然后末位加1”,简称,简称“求反加求反加1”。例如:例如:x0.1010,则,则x原原0.1010,x补补0.1010 x0.1010,则,则x原原1.1010,x补补1.0110 容易看出,当容易看出,当x0时,若把时,若把x补补除符号位外除符号位外“求反加求反加1”,即可得到,即可得到x原原。也就是说,对一个补码
20、表示的数,。也就是说,对一个补码表示的数,再次求补,可得该数的原码。再次求补,可得该数的原码。n反码反码定点小数反码定义如下:定点小数反码定义如下:若定点小数的若定点小数的反反码序列为码序列为X0.X1Xn ,则则式中,式中,x代表真值代表真值,x反反为补码表示的机器数为补码表示的机器数。若定点整数的补码序列为若定点整数的补码序列为 ,则,则u正数的反码是其本身,负数的反码是其对应正数求反,正数的反码是其本身,负数的反码是其对应正数求反,0的反码有两种表示,分别为全的反码有两种表示,分别为全0或者全或者全1。u反码运算规则:反码运算规则:X+Y反反=X反反+Y反反+循环进位循环进位 XY反反=
21、X反反+Y反反+循环进位循环进位如上所述,由原码表示容易得到相应的反码表示。例如:如上所述,由原码表示容易得到相应的反码表示。例如:x0.1001,x原原0.1001,x反反0.1001x0.1001,x原原1.1001,x反反1.0110n原码、反码、补码之间的转换原码、反码、补码之间的转换 转换规则如下图所示:转换规则如下图所示:n移码表示法移码表示法设定点整数移码形式为设定点整数移码形式为 ,则,则 其中其中 式中式中x为真值,为真值,x移移为其移码。为其移码。u把真值把真值x在数轴上向正方向平移在数轴上向正方向平移 单位,移码由此得单位,移码由此得名。又叫增码。名。又叫增码。u移码特点
22、:移码特点:1)移码是把真值映射到一个正数域(表中为移码是把真值映射到一个正数域(表中为0255),),因此移码的大小可以直观地反映真值的大小。无论是因此移码的大小可以直观地反映真值的大小。无论是正数还是负数,用移码表示后,可以按无符号数比较正数还是负数,用移码表示后,可以按无符号数比较大小。大小。2)移码的数值部分与相应的补码各位相同,而符号移码的数值部分与相应的补码各位相同,而符号位与补码相反。在移码中符号位为位与补码相反。在移码中符号位为0表示真值为负数,表示真值为负数,符号位为符号位为1表示真值为正数。表示真值为正数。3)移码为全移码为全0时,它对应的真值最小时,它对应的真值最小。4)
23、真值真值0在移码中的表示是唯一的,即:在移码中的表示是唯一的,即:02000010000n移1.4.3 数的定点表示与浮点表示n定点表示法定点表示法u定点小数、定点整数定点小数、定点整数n浮点表示法浮点表示法u编码格式编码格式:通常由尾数和阶码组成;其中尾数表示通常由尾数和阶码组成;其中尾数表示有效数字,阶码表示小数点位置。表示如下:有效数字,阶码表示小数点位置。表示如下:其中其中M是尾数,是尾数,R是基数(常取是基数(常取2),),E是阶码,是阶码,S是符号位。是符号位。在计算机中表示形式为:在计算机中表示形式为:其中其中S是符号位,是符号位,E是阶码,是阶码,M是尾数。是尾数。sN=(-1
24、)EMRSEMu浮点数的规格化:浮点数的规格化:不丢失数字,提高运算精度。不丢失数字,提高运算精度。1)如果阶码以)如果阶码以2为底,则规格化浮点数的尾数为底,则规格化浮点数的尾数M的的绝对值应满足:绝对值应满足:2)对于原码,)对于原码,M1=1;3)对于补码,对于补码,正数时,正数时,M1=1,负数时,负数时M1=0;“尾尾数最高位与符号位相反数最高位与符号位相反”即为判断浮点数是否为规即为判断浮点数是否为规格化数的标志格化数的标志。1M12例例 将浮点数将浮点数 转换为规格化表示。转换为规格化表示。解析:该数据为负数,符号为为解析:该数据为负数,符号为为1,尾数的补码为,尾数的补码为1.
25、1101,由规格化步骤,将尾数左移,由规格化步骤,将尾数左移2位,阶码减位,阶码减2,从,从而使小数点后第一位为而使小数点后第一位为0,规格化后为:,规格化后为:00.0011 221.01002nIEEE 754标准:标准:对浮点数的编码格式的标准化,以便于浮点数的编码格式的标准化,以便于实现不同计算机之间的软件移植。实现不同计算机之间的软件移植。其中的其中的浮点编码有浮点编码有32位、位、64位和位和80位三种格式,分别称位三种格式,分别称为短实数(为短实数(Short real)、长实数()、长实数(Long real)和临时)和临时实数(实数(Temporary real)。)。短实数
26、:短实数:其中:其中:S为符号为,为符号为,E为阶码,为阶码,M是尾数。是尾数。313023220SE7E0M1M23n在在IEEE754浮点数格式中,符号位浮点数格式中,符号位S仍然用仍然用0表示正表示正数,数,1表示负数。对于表示负数。对于32位格式,阶码为位格式,阶码为8位,正常位,正常数的阶码数的阶码E的取值范围为的取值范围为1254,偏移值为,偏移值为127;尾;尾数数M可以取任意的可以取任意的23位二进制数值,加上隐含的位二进制数值,加上隐含的M0(1)位,可达到)位,可达到24位的运算精度。位的运算精度。n阶码阶码E是一个带偏移的无符号整数,从中减去相应是一个带偏移的无符号整数,
27、从中减去相应的偏移值即为浮点数的实际阶码值。的偏移值即为浮点数的实际阶码值。例例 试试给出十进制数给出十进制数-0.625的的IEEE754单精度数标准单精度数标准代码。代码。解解 先将先将0.625转换为二进制形式为转换为二进制形式为-0.101,相应的浮,相应的浮点数表示形式为点数表示形式为 ,再,再转换为转换为IEEE 754标标准的规格化形式为:准的规格化形式为:。再由。再由IEEE754单精度单精度数值公式转换,可得到数值公式转换,可得到 E=126=01111110,所以,所以-0.625的的IEEE754单精度标单精度标准代码为:准代码为:S=1;E=01111110,M1M23
28、=0100000000000000000000000.101 211.01 2例例 试给出如下试给出如下IEEE 754单精度标准代码的十进制数单精度标准代码的十进制数表示表示 S=0,E=10000011,M1M23=10000000000000000000000;解解 S=0,E=10000011B=131D,规格化的尾数为,规格化的尾数为1.1B;由由IEEE 754单精度标准的数值公式,可得所求十进单精度标准的数值公式,可得所求十进制为:制为:0131 1274(1)(10.5)21.5 21.5 16=24.01.5 数据在计算机中的运算方法数据在计算机中的运算方法1.5.1 定点数
29、加减法运算定点数加减法运算1)补码加法运算)补码加法运算两数的补码直接执行加法运算,符号位与数值位一起两数的补码直接执行加法运算,符号位与数值位一起参加运算。参加运算。例:例:在模在模2的意义下,将多出的的意义下,将多出的2丢失(即丢失(即10.1010000.101000),得到),得到 0.1100010.0010010.1100011.110111xyxy 补补0.101000 xy补 补码加法运算的主要特点如下:补码加法运算的主要特点如下:参与运算的数均用补码表示;参与运算的数均用补码表示;符号数当作数的一部分参加运算;符号数当作数的一部分参加运算;在模在模2的意义下相加,多出的的意义
30、下相加,多出的2可以去掉;可以去掉;运算结果为补码表示。如符号位为运算结果为补码表示。如符号位为0,表明运算结果,表明运算结果为正数;为正数;如符号位为如符号位为1,表明运算结果为负数。,表明运算结果为负数。2)补码减法运算)补码减法运算 把减法运算转化为加法运算,即把减去一个正数看成把减法运算转化为加法运算,即把减去一个正数看成加上一个负数,并把该负数用补码表示,然后一律按加上一个负数,并把该负数用补码表示,然后一律按加法规则进行计算。加法规则进行计算。()xyxyxy 补补补补3)加减法运算的硬件实现)加减法运算的硬件实现 为理解计算机中的基本算术运算部件,下面给出前述理解计算机中的基本算
31、术运算部件,下面给出前述加、减法运算的硬件实现框图。加、减法运算的硬件实现框图。其中求补器将寄存器其中求补器将寄存器B中的二进制数中的二进制数“连同符号位每连同符号位每位位求反,末位加求反,末位加1”后送出,然后经开关后送出,然后经开关SW与寄存器与寄存器A中的中的被减数相加,从而实现被减数相加,从而实现“化减为加化减为加”的目的。的目的。开关开关SW实现加法或减法的选择。实现加法或减法的选择。OF=溢出标志,溢出标志,SW=开关。开关。4)溢出判断)溢出判断 溢出:溢出:运算结果超出计算装置所能表示的数值范围运算结果超出计算装置所能表示的数值范围。溢出停机:溢出停机:发生溢出时,计算机必须能
32、够立即发现,发生溢出时,计算机必须能够立即发现,并停止运算,或做相应错误处理。并停止运算,或做相应错误处理。根据参加运算的两个数的符号及运算结果的符号判断根据参加运算的两个数的符号及运算结果的符号判断溢出;溢出函数溢出;溢出函数 这是从符号位之间的关联出发,判断溢出,当两个正数这是从符号位之间的关联出发,判断溢出,当两个正数相加,结果为负,或者两个负数相加结果为正时,产生相加,结果为负,或者两个负数相加结果为正时,产生溢出。溢出。根据两种进位位的状态判断溢出根据两种进位位的状态判断溢出;溢出函数为:溢出函数为:式中式中CS为符号位产生的进位,为符号位产生的进位,C1为最高有效位产生的进为最高有
33、效位产生的进位。位。0010000Fx y zx y z21FCsC1.5.2 定点数乘法运算定点数乘法运算下图为无符号数二进制整数乘法的基本步骤,与手动演下图为无符号数二进制整数乘法的基本步骤,与手动演算步骤一样。算步骤一样。1 0 1 0 被乘数(10)1 1 0 1 乘数 (13)1 0 1 0 0 0 0 0 部分积 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1 0 乘积(130)u与手动演算相比,计算机中的乘法操作更加有效。与手动演算相比,计算机中的乘法操作更加有效。计算机中可以边产生部分积边做加法,而不是等到计算机中可以边产生部分积边做加法,而不是等到最后再将所有部分
34、积相加;最后再将所有部分积相加;由于乘数的每个由于乘数的每个1,需要,需要“相加相加”和和“移位移位”两个两个操作,而对于乘数的每一个操作,而对于乘数的每一个0,则只需要移位操作,则只需要移位操作,所以可以节省某些部分积的生成时间。所以可以节省某些部分积的生成时间。n补码乘法补码乘法被乘数、乘数、积都用补码表示,连同符号位一道运被乘数、乘数、积都用补码表示,连同符号位一道运算。若算。若X、Y为带符号数,则补码乘法具有如下特性为带符号数,则补码乘法具有如下特性:XY补补X补补Y补补 (积的补码等于补码的积)(积的补码等于补码的积)一种比较好的补码乘法:一种比较好的补码乘法:布斯(布斯(Booth
35、)算法)算法采用相加和相减的操作计算补码数据的乘积。采用相加和相减的操作计算补码数据的乘积。Booth算算法对乘数从低位开始判断,根据两个数据位的情况决法对乘数从低位开始判断,根据两个数据位的情况决定进行加被乘数、减被乘数还是仅仅做移位操作。定进行加被乘数、减被乘数还是仅仅做移位操作。判断的两个数据位是乘数当前的最低位及其右边的位判断的两个数据位是乘数当前的最低位及其右边的位(初始时需添加一个辅助位(初始时需添加一个辅助位0),移位操作是算术右移。),移位操作是算术右移。1.5.2 定点数除法运算定点数除法运算n无符号整数除法无符号整数除法常见的方法有常见的方法有“恢复余数法恢复余数法”和和“
36、加减交加减交替法替法”。恢复余数法:恢复余数法:要恢复余数,造成除法进行过程的步数要恢复余数,造成除法进行过程的步数不固定,控制较复杂,运算速度较慢不固定,控制较复杂,运算速度较慢。加减交替法:加减交替法:当运算过程中出现不够减时,不必通过当运算过程中出现不够减时,不必通过加法来恢复余数,根据余数的符号,可继续往下运算加法来恢复余数,根据余数的符号,可继续往下运算。无符号整数除法的无符号整数除法的“加减交替法加减交替法”流程图如下所示:流程图如下所示:上上图中图中A、Q是两个是两个n位的移位寄存器,用来存放部分余位的移位寄存器,用来存放部分余数。开始时,被除数(可以有数。开始时,被除数(可以有
37、2n位长度)放在这两个寄位长度)放在这两个寄存器中。除数放在存器中。除数放在M寄存器,它保存到除法结束。寄存器,它保存到除法结束。每步每步A、Q向左移向左移1位。位。Q寄存器的最右端空单元用来存寄存器的最右端空单元用来存放每步产生的商。当除法过程结束时,放每步产生的商。当除法过程结束时,Q包含了商而包含了商而A包包含了(已移位的)余数。含了(已移位的)余数。例例 用无符号整数加减交替除法计算用无符号整数加减交替除法计算7/23余余1 解解 运算开始时,运算开始时,A、Q中存放被除数中存放被除数00000111,M中存中存放除数放除数0010。用加减交替除法进行的运算过程如下所。用加减交替除法进
38、行的运算过程如下所示:示:M(除数)AQ 001000000111初始值AAM11100111 A、Q左移1位,商011001110 循环1AAM11101110A、Q左移1位,商011011100循环2AAM11111100A、Q左移1位,商011111000循环3AAM00011000A、Q左移1位,商100110001循环4AAM00010001 00010011最后一步余数为正数,Q左移一位,上商1,结束。商为0011,存于Q中,余数为0001,存于A中。n补码除法补码除法 被除数、除数、商和余数均用补码表示,连同符号位被除数、除数、商和余数均用补码表示,连同符号位一道运算。一道运算。
39、设设X、Y为带符号数,则补码除法具有如下特性:为带符号数,则补码除法具有如下特性:XY补补X补补Y补补(商的补码等于补码的商)(商的补码等于补码的商)这里主要介绍加减交替补码除法:商和余数经过一步这里主要介绍加减交替补码除法:商和余数经过一步一步运算得到。其中每一步运算会得到商的一位和一一步运算得到。其中每一步运算会得到商的一位和一个部分余数,经过多步运算才能得到最后的商和最后个部分余数,经过多步运算才能得到最后的商和最后的余数。的余数。其流程图如下:其流程图如下:上图中:上图中:把除数(补码)放入寄存器把除数(补码)放入寄存器M,把被除数从,把被除数从n位扩展成位扩展成2n位的补码后放入寄存
40、器位的补码后放入寄存器A和和Q中,中,A中为高位部分(中为高位部分(全全0或全或全1),),Q中为低位部分;中为低位部分;把寄存器把寄存器A和和Q左移左移1位;位;如果如果A和和M同号,则执行同号,则执行AAM;否则,执行;否则,执行AAM;若若A在操作之后符号未改变或在操作之后符号未改变或A0,则操作成功,令,则操作成功,令Q01;否则,操作不成功,恢复;否则,操作不成功,恢复A原来的内容,并令原来的内容,并令Q00;重复上述步骤共重复上述步骤共n次;次;若被除数与除数同号,则商在若被除数与除数同号,则商在Q中,余数在中,余数在A中,结束中,结束;若被除数与除数异号,则需将;若被除数与除数异
41、号,则需将Q中的值取中的值取“相反数相反数”才是正确的商。才是正确的商。例例 用图用图 1.10的补码除法流程计算的补码除法流程计算 (14)(3)(4)余(2)。解解 设设n4,14补补0000 1110,3补补1101,4补补1100,2补补0010,则原式的二进制机器,则原式的二进制机器数(补码)表示形式为:数(补码)表示形式为:0000 111011011100余余0010。设设A、Q是两个是两个4位的移位寄存器,运算开始时,位的移位寄存器,运算开始时,A、Q中中存放被除数存放被除数0000 1110,除数,除数1101存放于存放于M寄存器中。寄存器中。1.5.4 浮点数的四则运算n在
42、计算机中,浮点数由阶码和尾数两部分组成。在计算机中,浮点数由阶码和尾数两部分组成。规格化浮点数的阶码通常是带符号整数,其尾数是带规格化浮点数的阶码通常是带符号整数,其尾数是带符号小数,因此,规格化浮点数的运算可归结为定点符号小数,因此,规格化浮点数的运算可归结为定点整数的运算和定点小数的运算。整数的运算和定点小数的运算。对非规格化的浮点数,先进行规格化对非规格化的浮点数,先进行规格化,然后按照规格,然后按照规格化小数运算规则运算化小数运算规则运算。1.浮点数加减法浮点数加减法 分为对阶、尾数加减运算、规格化、舍入和判断结果分为对阶、尾数加减运算、规格化、舍入和判断结果是否溢出五个步骤。是否溢出
43、五个步骤。(1)对阶对阶 对阶就是使参与运算的两个浮点数的阶码相等。对阶就是使参与运算的两个浮点数的阶码相等。对阶的方法是:将阶码小的数的尾数右移,同时增加对阶的方法是:将阶码小的数的尾数右移,同时增加其阶码,使小的阶码与大的阶码相同,并保持原浮点其阶码,使小的阶码与大的阶码相同,并保持原浮点数的值不变。由于在对阶时会将尾数的最低位移出,数的值不变。由于在对阶时会将尾数的最低位移出,所以浮点数的精度可能会下降。所以浮点数的精度可能会下降。另外,在对阶时还必须检查阶码是否溢出。另外,在对阶时还必须检查阶码是否溢出。(2)尾数运算尾数运算(3)规格化规格化 如果加减运算后得到的尾数不符合规格化的要
44、求,就如果加减运算后得到的尾数不符合规格化的要求,就需要进行规格化处理。规格化分为左归和右规。在规需要进行规格化处理。规格化分为左归和右规。在规格化时也必须检查阶码是否溢出。格化时也必须检查阶码是否溢出。(4)舍入舍入 常用的舍入方法是常用的舍入方法是“0舍舍1入法入法”。(5)判断结果是否溢出判断结果是否溢出例例 按浮点数加法基本步骤完成(按浮点数加法基本步骤完成(0.5)()(0.125)的二)的二进制数运算。假定尾数为进制数运算。假定尾数为4位。位。解解 本题没有规定浮点数的编码格式,现直接采用数值运本题没有规定浮点数的编码格式,现直接采用数值运算来表示浮点数的运算步骤。算来表示浮点数的
45、运算步骤。0.5=1/2=0.100020 0.125=1/8=0.0010=0.10002-2 对阶。对阶。将阶码较小的数的尾数右移将阶码较小的数的尾数右移2位,阶码加位,阶码加2,得,得0.10002-2 =0.001020 尾数相加。尾数相加。(0.1000 20)(0.0010 20)=0.0110 20 规格化规格化。将运算结果。将运算结果0.0110 20的尾数左移的尾数左移1位,阶码位,阶码减减1,得,得0.0110 20=0.1100 2-1 舍入。舍入。运算结果未超出运算结果未超出4位存储,不需进行舍入操作。位存储,不需进行舍入操作。判断是否溢出。判断是否溢出。数据无溢出,最
46、后结果为:数据无溢出,最后结果为:0.1100 2-1=0.0110=3/8=0.375例例 按浮点数减法基本步骤完成按浮点数减法基本步骤完成(2.5)(1.125)的二进的二进制数运算。假设尾数为制数运算。假设尾数为4位,阶码为位,阶码为3位,均采用原码位,均采用原码表示。运算时设置两个保护位,舍入时采用表示。运算时设置两个保护位,舍入时采用“0舍舍1入入法法”。符号位占。符号位占1位,用、表示,(机器中用位,用、表示,(机器中用0、1表示)。表示)。解解 先规格化先规格化(阶码和尾数用二进制表示阶码和尾数用二进制表示)。2.5=10.1 2+00=.101000 2+10(尾数右边的(尾数
47、右边的00为为增设的两位保护位)增设的两位保护位)1.125=1.001 2+00=.100100 2+01(尾数右边的(尾数右边的00为增设的两位保护位)为增设的两位保护位)对阶对阶。将阶码较小的数(。将阶码较小的数(.100100 2+01)的尾数右)的尾数右移移1位,阶码加位,阶码加1,得,得.100100 2+01=.010010 2+10尾数相减。尾数相减。(.101000 2+10)(.010010)2+10)=.111010 2+10规格化。规格化。结果已是规格化形式。结果已是规格化形式。舍入。舍入。按题目要求采用按题目要求采用“0舍舍1入法入法”。.111010 2+10=.1
48、111 2+10判断是否溢出。判断是否溢出。在运算过程中阶码始终没超过限定的在运算过程中阶码始终没超过限定的位数位数3位,所以没有溢出。位,所以没有溢出。最后的十进制结果是:最后的十进制结果是:(2.5)(1.125)=3.75,有,有舍入误差。舍入误差。2.浮点数的乘法和除法浮点数的乘法和除法n两个浮点数相乘,乘积的阶码等于两个乘数的阶码之两个浮点数相乘,乘积的阶码等于两个乘数的阶码之和,乘积的尾数等于两个乘数的尾数之积,乘积的符和,乘积的尾数等于两个乘数的尾数之积,乘积的符号为两个乘数符号的号为两个乘数符号的“异或异或”。n两个浮点数相除,商的阶码等于被除数的阶码减去除两个浮点数相除,商的
49、阶码等于被除数的阶码减去除数的阶码得到的差,商的尾数等于被除数的尾数除以数的阶码得到的差,商的尾数等于被除数的尾数除以除数的尾数得到的商,商的符号为被除数符号和除数除数的尾数得到的商,商的符号为被除数符号和除数符号的符号的“异或异或”。n对浮点数相乘或相除的结果也需进行规格化、舍入并对浮点数相乘或相除的结果也需进行规格化、舍入并判断是否溢出。判断是否溢出。n例例 按浮点数乘法基本步骤完成按浮点数乘法基本步骤完成(0.375)(0.5)的二的二进制数运算。假设尾数为进制数运算。假设尾数为4位,阶码为位,阶码为3位,均采用原位,均采用原码。运算时设置两个保护位,舍入时采用码。运算时设置两个保护位,
50、舍入时采用“0舍舍1入法入法”。符号位占。符号位占1位,用、表示,(机器中用位,用、表示,(机器中用0、1表表示)。示)。解解 先将被乘数和乘数分别写成规格化浮点数形式先将被乘数和乘数分别写成规格化浮点数形式(阶码和阶码和尾数用二进制表示尾数用二进制表示):0.375=.0112+00=.1100002-01 (尾数右边的00为增设的两位保护位)0.5=.1 2+00=.100000 2+00(尾数右边的00为增设的两位保护位)乘积的符号:乘积的符号:()XOR()=()乘积的阶码:(01)(00)=(01)乘积的尾数:(.110000)(.100000)=(.011000)所以,(0.375
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。