补码加减运算答案
- 格式:doc
- 大小:55.00 KB
- 文档页数:10
3.1 已知[x]补和[y]补的值,用补.码加减法计算x+y和x-y(写出结果的二进制表示和十进制表示),并指出结果是否溢出以及溢出的类型(建议采用变形补码计算)。
(1) [x]补=0.11011 , [y]补=0.00011(2) [x]补=0.10111 [y]补=1.00101(3) [x]补=1.01010 [y]补=1.10001(4) [x]补=1.10011 [y]补=0.11001解:(1) [x]补=0.11011 , [y]补=0.00011[-y]补=1.11101[X+Y]补=[x]补+[y]补= 00.11011+ 00.00011__________________00.11110X+Y= +15/16 =+0.1111B[X-Y]补=[x]补+[-y]补=00.11011+11.11101__________________00.11000X-Y= +12/16 =+3/4=+0.11B检验【X= + 27/ 32Y= +3/32X+Y = +(27+3)/32 =+30/32=0.11110BX-Y = (27-3)/32=+24/32=+3/4=0.11B 】(2) [x]补=0.10111 , [y]补=1.00101[Y]原=1.11011[-y]补=0.11011[X+Y]补=[x]补+[y]补= 00.10111+ 11.00101__________________11.11100X+Y=-0.001B=-1/8[X-Y]补=[x]补+[-y]补= 00.10111+00.11011________________01.10010 (上溢)[X-Y]补=1.10010 (上溢)【修正:X-Y=-0.01110 = -7 / 16+2 = 25 / 16 】检验【X= +23/ 32Y=-27/32X+Y = (23-27)/32 =-4/32=-1/8X-Y = (23+27)/32=+50/32 =25/16 (上溢) 】(3) [x]补=1.01010 , [y]补=1.10001[-y]补=0.01111[X+Y]补=[x]补+[y]补= 11.01010+ 11.10001__________________10.11011X+Y=0.11011B=+27/32[ 修正27/32-2=27-64=-37/32 ][X-Y]补=[x]补+[-y]补= 11.01010+ 00.01111________________11.11001X-Y=-0.00111B=-7/32检验【X= -22/ 32=-11/16Y=-15/32X+Y = (-15-22) /32 =-37/32 (下溢)X-Y = (-22-(-15)) / 32 =-7/32 】(4) [x]补=1.10011 , [y]补=0.11001[ X= -0.01101=-13/ 32Y= +0.11001=25/32X+Y = (-13+25)/32 =12/32=3/8X-Y = (-13-25)/32=-38/32 = -19 / 16 (下溢) ][-y]补=1.00111[X+Y]补=[x]补+[y]补= 11.10011+ 00.11001__________________00.01100X+Y=0.01100B=3/8[X-Y]补=[x]补+[-y]补= 11.10011+ 11.00111________________10.11010 (下溢)[X-Y]补=0.11010 (下溢)【修正:X-Y = 13 / 16 – 2 = -19 / 16 】检验【X= -0.01101=-13/ 32Y= +0.11001=25/32X+Y = (-13+25)/32 =12/32=3/8X-Y = (-13-25)/32=-38/32 = -19 / 16 (下溢) 】3.2 给出x和y的二进制值,用补码加减法计算x+y和x-y(写出结果的二进制表示和十进制表示),并指出结果是否溢出以及溢出的类型(建议采用变形补码什算)、(1) x=0.10111 y=0.11011 (2) x=0.11101 y=0.10011(3) x=0.11011 y=-0.1010 (4) x=-0.11111 y=0.11011(5) x=-0.11011 y=0.1010 (6) x=-0.11010 y=-0.11001(7) x=-1011101 y=+1101101 (8) x=+1110110 y=-1001101 (9) x=+1101110 y=+1010101 (10) x=-1111111 y=-1101101 解:(1)X=0.10111 Y=0.11011[X]补=0.10111[Y]补=0.11011[-Y]补=1.00101[X+Y]补=[X]补+[Y]补= 00.10111+ 00.11011_______________________01.10010 (上溢)X+Y 上溢[X-Y]补=[X]补-[Y]补= 00.10111+ 11.00101_________________________11.11100X-Y=-0.00100=-1/8检验【X=23/32 Y=27/32X+Y=50/32[ 修正:X+Y=-0.0111 =-7 / 16 +2 =25 / 16 ]X-Y=-1/8】(2)X=0.11101 Y=0.10011[X]补=0.11101[Y]补=0.10011[-Y]补=1.01101[X+Y]补=[X]补+[Y]补= 00.11101+ 00.10011_______________________01.10000 (上溢)X+Y 上溢[X-Y]补=[X]补-[Y]补= 00.11101+ 11.01101_________________________00.01010X-Y=0.01010=5/16检验【X=29/32 Y=19/32X+Y=48/32 =3 / 2[ 修正:X+Y = -0.1 = -1 / 2+2 =1.5 ] X-Y=10/32=5 / 16】(3)X=0.11011 Y=-0.1010[X]补=0.11011[Y]补=1.01100[-Y]补=0.10100[X+Y]补=[X]补+[Y]= 00.11011+ 11.01100_______________________00.00111X+Y =7/32[X-Y]补=[X]补-[Y]补= 00.11011+ 00.10100_________________________01.01111X-Y=-0.10001=-17/32 (上溢)[ 修正-17/32+2=47/32 ]检验【X=27/32 Y=-20/32X+Y=7/32X-Y=47/32】(4)X=-0.11111 Y=0.11011[X]补=1.00001[Y]补=0.11011[-Y]补=1.00101[X+Y]补=[X]补+[Y]补= 11.00001+ 00.11011_______________________11.11100X+Y =-0.00100=-1/8[X-Y]补=[X]补-[Y]补= 11.00001+ 11.00101_________________________10.00110 (下溢)X-Y=0.00110=3/16 (下溢)[ 修正6/32-2=58/32 =29/16 ]检验【X=-31/32 Y=27/32X+Y=-4/32 =-1/8X-Y=58/32=29/16】(5)X=-0.11011 Y=0.10100[X]补=1.00101[Y]补=0.10100[-Y]补=1.01100[X+Y]补=[X]补+[Y]补= 11.00101+ 00.10100_______________________11.11011X+Y =-0.00111=-7/32[X-Y]补=[X]补-[Y]补= 11.00101+ 11.01100_________________________10.10001 (下溢)X-Y=17/32 (下溢)[ 修正17/32-2=-47/32 ]检验【X=-27/32 Y=20/32X+Y=-7/32X-Y=-47/32】(6)X=-0.11010 Y=-0.11001[X]补=1.00110[Y]补=1.00111[-Y]补=0.11001[X+Y]补=[X]补+[Y]补= 11.00110+ 11.00111_______________________10.01101X+Y =13/32 (下溢) [ 修正13/32-2=-51/32 ] [X-Y]补=[X]补-[Y]补= 11.00110+ 00.11001_________________________11.11111X-Y=-0.00001= -1/32检验【X=-26/32 Y=-25/32X+Y=-51/32X-Y=-1/32】(7) X=-1011101 Y=+1101101 [X]补=10100011[Y]补=01101101[-Y]补=1.01100[X+Y]补=[X]补+[Y]补= 110100011+ 001101101_______________________000010000X+Y =00010000=16[X-Y]补=[X]补-[Y]补= 110100011+ 110010011_________________________100110110 (下溢) X-Y=54 (下溢)[ 修正54-256=-202 ]检验【X=-93 Y=109X+Y=16X-Y=-202】(8) X=+1110110 Y=-1001101 [X]补=01110110[Y]补=10110011[-Y]补=01001101[X+Y]补=[X]补+[Y]补= 001110110+ 110110011_______________________000101001X+Y =41[X-Y]补=[X]补-[Y]补= 0011101101+ 001001101_________________________011000011 (上溢)X-Y=-61 (上溢)[ 修正-61+256=195 ]检验【X=118 Y=-77X+Y=41X-Y=195】(9)X=+1101110 Y=+1010101[X]补=01101110[Y]补=01010101[-Y]补=10101011[X+Y]补=[X]补+[Y]补= 001101110+001010101_______________________011000011 (上溢)X+Y =-0111101=-61 [ 修正-61+256=195 ] [X-Y]补=[X]补-[Y]补= 001101110+ 110101011_________________________000011001X-Y=25检验【X=110 Y=85X+Y=195X-Y=25】(10) X=-1111111 Y=-1101101[X]补=10000001[Y]补=10010011[-Y]补=01101101[X+Y]补=[X]补+[Y]补= 110000001+ 110010100_______________________100010100 (下溢)X+Y =00010100=20 [ 修正20-256=-236 ] [X-Y]补=[X]补-[Y]补= 110000001+ 001101101_________________________111101110检验【X-Y=-0010010=-18X=-127 Y=-109X+Y=-236X-Y=-18】。
一.补码的加、减运算在计算机中,通常总是用补码完成算术的加减法运算。
其规则是:[X+Y]补= [X]补+ [Y]补,[X-Y]补= [X]补- [Y]补= [X]补+ [-Y]补这表明,有了补码表示的被加(减)数和加(减)数,要完成计算补码表示的二数之和或二数之差,只需用二数的补码直接执行加减运算即可,符号位与数值位同等对待,一起参加运算,若运算结果不溢出,即不超出计算机所能表示的范围,则结果的符号位和数值位同时为正确值。
此外,还可以看到,实现减运算时,用的仍是加法器线路,把减数的负数的补码送加法器即可。
在有了一个数的补码之后,求这个数的负数的补码,是简单地把这个数的补码逐位取反再在最低位加1即可得到。
例如,[Y]补=101101,则[-Y]补=010011,这大大简化了加减运算所用的线路和加减运算的实现算法。
下面的问题是如何检查加减运算中的溢出问题。
通常有三种表述方式(说法):(1) 两个符号相同的补码数相加,如果和的符号与加数的符号相反,或两个符号相反的补码数相减,差的符号与减数的符号相同,都属于运算结果溢出。
这种判别方法比较复杂,要区别加还是减两种不同运算情况,还要检查结果的符号与其中一个操作数的符号的同异,故很少使用;(2) 两个补码数相加减时,若最高数值位向符号位送的进位值与符号位送向更高位的进位值不相同,也是运算结果溢出。
(3) 在采用双符号位(如定点小数的模4补码)运算时,若两个符号位的得值不同(01或10)则是溢出。
01表明两个正数相加,结果大于机器所能表示的最大正数,称为"上溢";10表明两个负数相加,结果小于机器所能表示的最小负数,称为"下溢";双符号位的高位符号位,不管结果溢出否,均是运算结果正确的符号位,这个结论在乘法运算过程中是很有实际意义的。
请注意,在采用双符号位的方案中,在寄存器和内存储器存储数据时,只需存一位符号,双符号位仅用在加法器线路部分。
1.机器数字长为8位(含1位符号位),当X= -127 (十进制)时,
其对应的二进制表示,(X)原表示,(X)反表示,(X)补表示分别是多少二进制表示为-01111111
[X]原= [X]反= [X]补= [X]移= 00000001
2.已知x=,y=,求x+y=,x-y=
[x]补= [x]补=
+[y]补= +[-y]补=
x+y=+ x-y产生溢出
3.用16k×8位的SRAM芯片构成64K×16位的存储器,要求画出该
存储器的组成逻辑框图。
存储器容量为64K×16位,其地址线为16位(A15—A0),数据线也是16位(D15—D0)
SRAM芯片容量为16K×8位,其地址线为14位,数据线为8位,因此组成存储器时须字位同时扩展。
字扩展采用2 :4译码器,以16K为一个模块,共4个模块。
位扩展采用两片串接。
(1)(5分)
(2)(5分)
ACC MQ ALU X IR MDR PC MAR 设计题用4K*8的存储器芯片构成16KB的存储器,地址线为A15~A0,请设计。
方法一:采用位扩展
1、需要几片芯片
2、 数据线有哪几位
3、 加至各芯片的地址线
4、画出该存储器逻辑结构图
MREQ*R/W*A11~A0
方法二:采用字扩展 1、需要几片芯片 2、 数据线有哪些
3、 加至芯片上的地址线有哪几位
4、 用来译码的地址有哪几位
5、 用来寻址的地址线有哪几位
6、画出该存储器的结构图
A12。
习题4 4.1设X=0.1101,Y= -0.0110,求:(1)[X]补(2)[-X]补(3)[2X]补(4)[-2X]补(5)[X/2]补(6)[-X/2]补(7)[Y]补(8)[-Y]补(9)[2Y]补(10)[-2Y]补(11)[Y/2]补(12)[-Y/2]补(13)[-Y/4]补1. (1) [X]补= 0.1101(2) [-X]补= 1.0011(3) [2X]补= 0.1010 溢出(4) [-2X]补= 1.0110 溢出(5)[X/2]补= 0.0110注意:参见P109中的补码算术移位规则,以及P110的例4.4(6)[-X/2]补= 1.1001(7)[Y]补= 1.1010(8) [-Y]补= 0.0110(9) [2Y]补=1.0100(10)[-2Y]补=0.1100(11)[Y/2]补=1.1101(12)[-Y/2]补= 0.0010(13) [-Y/4]补= 0.00014.2 已知X和Y,用变形补码计算X+Y和X-Y,并指出运算结果是否溢出:(1) X=0.11011,Y=0.11111(2) X=-0.1101,Y=0.0110答:.(1)[X]补=00.11011 [Y]补=00.11111 [-Y]补=11.00001[X]补 00.11011+ [Y]补 00.11111 [X+ Y]补 01.11010 [X]补 00.11011 + [-Y]补 11.00001 [X-Y]补 11.11100 S f1与S f2不同,溢出S f1与S f2相同,无溢出所以:[X+Y]补:发生溢出[X-Y]补= 1.11100注意:参见P107中的双符号位判溢方法原理。
(2) [X+Y]补=1.1001[X-Y]补:溢出4.4 使用原码一位乘法计算X*Y : (1) X=0.11101,Y=0.01111 (2) X=-0.10011,Y=0.11010答: (1)[X]原=0.11101 [Y]原=0.01111000s s s P X Y =⊕=⊕=部分积0.00000乘数|Y|操作说明Y 5=1,+|X |0.11101+0.11101右移一位0.011100.11101+1.01011右移一位0.10101Y 2=1,+|X |0.11101+1.10010右移一位0.11001Y 1=0,+00.11101+1.10110右移一位0.11011+0.110110.00000 0011 01 0111011 0111 01101111右移一位Y 4=1,+|X |Y 3=1,+|X |100110.01101[]0.01101100110.0110110011P X Y ∴=∴⨯=+原4.5 使用补码Booth 乘法计算X*Y : (1) X=0.01111,Y=-0.11101 (2) X=-0.10011,Y=-0.11010答:(1)[X ]补=00.01111 [Y ]补=11.00011 [-X ]补=11.10001部分积00.00000乘数Y(Y n Y n+1)操作说明11.10001+11.1000111.1100000.00000+11.1100011.1110000.01111+00.01011右移一位00.0010100.00000+00.00101右移一位00.0001000.00000+00.0001000.0000111.1000111.10010+1.0001101 1.000110 1 1.00011 0 1 1.0001101 1.00Y 5Y 6=10,+[-X ]补右移一位Y 4Y 5=11,+0右移一位Y 0Y 1=10,+[-X ]补Y 1Y 2=00,+001101 1.001101右移一位Y 3Y 4=01,+[X ]补Y 2Y 3=00,+0所以:[X*Y ]补=1.1001001101X*Y =-0.01101100114.6 分别使用原码恢复余数除法和原码加减交替除法计算X/Y : (1) X=0.0111,Y=0.1101 (2) X=0.1011,Y=-0.1110 答:(1)原码恢复余数除法注意:参见P124中例4.9。
数字逻辑概论华中科技大学罗杰补码的加减运算加减运算是计算机中最基本的运算。
加减运算可以用原码、补码、BCD码等各种码制进行。
补码运算可以把减法转换为加法,现代计算机中均采用补码进行加减运算。
◆假设X和Y均为正数,则补码的运算规则如下:[ X ]补+ [ Y ]补= [ X+Y ]补(mod M)两个数的补码之和等于两数之和的补码。
[ X ]补-[ Y ]补= [ X ]补+ [ -Y ]补= [ X-Y ]补(mod M)两个数的补码之差等于两数之差的补码。
◆注意:参与运算的操作数均为补码,运算的结果仍然以补码表示。
运算时,符号位和数值位按同样的规则参加运算,结果的符号位由运算得出。
补码总是对确定的模而言,如果运算结果超过了模,则应将模(即进位)丢掉才能得到正确结果。
求15 –13 = ?(用补码)0000110100001111(15)(13)( 2 )000000100000111111110011+(15)补(-13)补( 2)补1进位111000000101111舍弃进位∵(15–13)补= (15 )补–(13)补= (15 )补+ (–13)补直接做减法运算转换为补码做加法运算◆注意:在进行二进制补码的加法运算时,被加数与加数的位数要相等,即让两个二进制数补码的符号位对齐。
两个二进制数的补码要采用相同的位数表示。
求13 –15 = ?(用补码)1111000100001101+(13)补(-15)补(-2)补0进位00011111110010∵(13-15 )补= (13 )补+ (–15)补求–13 –15 = ?(用补码)1111000111110011+(-13)补(-15)补(-28)补0进位11011100100111因为(-13-15 )补= (-13 )补+ (–15)补1舍弃进位求125+58 = ?(用补码)0011101001111101+(125)补( 58)补(183)补进位111101101111因为(125+58 )补= (125)补+ (58)补错误原因是:8位有符号数所能表示的补码数的最大值为127.这里,183 > 127,导致结果错误。
定点数补码加减法运算基本公式◆定点整数:[x ±y]补=[x]补+ [±y]补(mod 2n+1)◆定点小数:[x ±y]补=[x]补+ [±y]补(mod 2)定点数补码加减法运算◆符号位和数值位可同等处理;◆只要结果不溢出,将结果按2n+1或2取模,即为本次运算结果。
溢出判别方法——直接判别法◆同号补码相加,结果符号位与加数相反;◆异号补码相减,结果符号位与减数相同;------变形补码判别法变形补码,也叫模4补码:采用双符号位表示补码判别方法:双符号位结果00正01上溢10下溢11负——进位判别法判别方法:◆最高数值位的进位与符号位的进位是否相同;判别公式◆溢出标志V=C f⊕C n-1其中C f为符号位产生的进位,C n-1为最高数值位产生的进位。
定点除法运算约定判溢出:小数定点除法|x| <|y|,整数定点除法|x| >|y|被除数不等于0,除数不能为0串行除法-------原码恢复余数法步骤:1.用不含符号位的被除数+【-|y|】补:若余数为正,商1若余数为负,商0,并+【|y|】补恢复余数2.余数整体左移低位补0 +【-|y|】,余数处理同上PS:被除数(或余数)的绝对值减去除数的绝对值;机器内部用补码的加法运算实现在最末尾上商第一次上商判溢出小数定点除法|x| <|y|,整数定点除法|x| >|y|左移n次,上商n+1次符号位异或形成-------原码交替法运算规则:◆符号位不参加运算,取双符号位;◆用被除数减去除数:当余数为正时,商上1,余数左移一位,再减去除数;当余数为负时,商上0,余数左移一位,再加上除数。
◆根据余数的正负,再做如上处理(上商、加减除数)◆当第n+1步余数为负时,需加上|Y|得到第n+1步正确的余数,最后余数为r n×2-n(余数与被除数同号)。
Ps:上商n+1次n为商的精度第一次上商判溢出移n次加n+1次用移位的次数判断除法是否结束(是否达到要求的精度)并行除法并行除法器的类型◆恢复余数阵列除法器◆不恢复余数阵列除法器(采用加减交替法原理)基本元件:可控加法/减法(CAS)单元Ps:除数用补码表示,右移时符号位保持不变◆补码阵列除法器。
定点补码加减运算及溢出判断练习一姓名分数课堂练一、选择题1.若采用双符号位,则发生正溢的特征是:双符号位为()A.00 B.01 C.10 D.112.下列公式不正确的是()A.[X + Y]补 = [X]补 + [Y]补B. [X - Y]补 = [X]补 + [-Y]补C. [X - Y]补 = [X]补 - [Y]补D. [X - Y]补 = [-(Y-X)]补3.计算机内进行加/减法运算时常采用。
() A.ASCII码 B.原码 C.反码 D.补码4.补码运算的特点是符号位。
()A.与数值位分别进行运算 B.与数值位一起参与运算C.要舍去D.表示溢出5.x=+0.1011B, y=+0.0110B,则用补码运算[x-y]补=______。
( )A. 0.0101BB. 0.0001BC. 1.1011BD. 1.1111B6. 在大量数据传送中常用且有效的检验法是_____ ( )A.奇偶校验法 B.海明码校验 C.判别校验 D.CRC校验二、判断题(正确的打“√”,错误的打“×”)1.计算机内部的加减法都用补码运算是因为用户喜欢用。
( )2. [-Y]补的求法是除符号位外,其余位取反加1 。
( )3.两个正数相减一定不可能发生溢出。
( )4.补码加减法中,符号位产生的进位要丢掉。
( )5.两个正数相加有可能不发生溢出。
( )6.【X】补=模+X公式适用于任何范围内的负数的求补。
( )三、填空题1.在计算机中,凡是带符号的数一律用码表示。
2.已知[X]补=01110111B,[Y]补=01100010B,则[X-Y]补= 。
3.利用双符号位判断溢出时 C S+1 代表 C S 代表4.X=0.100101 , Y=0.001101 ,则 X+Y= 。
5.X=0.1101 , Y=-0.0101 ,则 X+Y= 。
6.两正数相加,结果为负表明发生(正/负)溢出7.在计算机中,无符号数经常用于表示。
原码,反码,补码及运算一、定义1.原码正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。
用这样的表示方法得到的就是数的原码。
【例2.13】当机器字长为8位二进制数时:X=+1011011 [X]原码=01011011Y=+1011011 [Y]原码=11011011[+1]原码=00000001 [-1]原码=10000001[+127]原码=01111111 [-127]原码=11111111原码表示的整数范围是:-(2n-1-1)~+(2n-1-1),其中n为机器字长。
则:8位二进制原码表示的整数范围是-127~+12716位二进制原码表示的整数范围是-32767~+327672.反码对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。
【例2.14】当机器字长为8位二进制数时:X=+1011011 [X]原码=01011011 [X]反码=01011011Y=-1011011 [Y]原码=11011011 [Y]反码=10100100[+1]反码=00000001 [-1]反码=11111110[+127]反码=01111111 [-127]反码=10000000负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。
反码表示的整数范围与原码相同。
3.补码正数的补码与其原码相同,负数的补码为其反码在最低位加1。
引入补码以后,计算机中的加减运算都可以统一化为补码的加法运算,其符号位也参与运算。
【例2.15】(1)X=+1011011 (2)Y=-1011011(1)根据定义有:[X]原码=01011011 [X]补码=01011011(2)根据定义有:[Y]原码=11011011 [Y]反码=10100100[Y]补码=10100101补码表示的整数范围是-2n-1~+(2n-1-1),其中n为机器字长。
则:8位二进制补码表示的整数范围是-128~+127(-128 表示为10000000,无对应的原码和反码)16位二进制补码表示的整数范围是-32768~+32767当运算结果超出这个范围时,就不能正确表示数了,此时称为溢出。
原码反码补码加减运算===========================================================================================处理器对两个操作数进⾏运算时,按照⽆符号数求得结果,并相应设置进位标志C;同时,根据是否超出有符号数的范围设置溢出标志V。
应该利⽤哪个标志,则由程序员来决定。
也就是说,如果将参加运算的操作数认为是⽆符号数,就应该关⼼进位;认为是有符号数,则要注意是否溢出。
所有的负数的反码等于原码各位取反;补码等于反码加⼀. ⼗六进制也是先化成2进制的在化补码。
补码的⽤途是让机器学会减法运算的。
应为所有的处理器是电路做的,电路其实只是加法器,只能做加法。
如何能让电脑做减法呢,就⽤补码啊。
减去⼀个数就等于加上她的补码。
原码加减法⽐较复杂,需要事先判断数的符号,然后决定做加法还是做减法运算。
补码的加减法运算⽐较简单,采⽤补码加减法运算,可将“正数加负数”的操作,转化为“正数加正数”的操作。
⼀般计算机采取补码进⾏加减法运算。
因减法运算可看作被减数加上⼀个减数的负值,即A-B=A+(-B),故在此将机器中的减法运算和加法运算合在⼀起讨论。
===========================================================================================1. 补码加减的基本公式.补码加法的基本公式为:整数 [A]补+[B]补=[A+B]补 (mod 2n+1)⼩数 [A]补+[B]补=[A+B]补 (mod 2).对于减法因A-B=A+(-B),则[A-B]补=[A+(-B)]补,由补码加法基本公式可得:整数 [A-B]补=[A]补+[-B]补 (mod 2n+1)⼩数 [A-B]补=[A]补+[-B]补 (mod 2)[X+Y]补= [X]补+[Y]补 [X-Y]补= [X]补+[-Y]补运算过程举例(假设机器字长4位,其中1位表⽰符号位):补码的加、减法的例⼦(a) (-7)+(+5) (b)(-4)+(+4)1,001 1,1000,101 0,1001,110 =-2 0,000 =0(c) (+5)+(+4) (d)(-7)+(-6)0,101 1,0010,100 1,0101,001 =溢出 0,011 =溢出计算机中这种超出机器字长的现象,称为溢出。
第二章运算方法和运算器练习一、填空题1. 补码加减法中,(符号位)作为数的一部分参加运算,(符号位产生的进位)要丢掉。
2. 为判断溢出,可采用双符号位补码,此时正数的符号用(00)表示,负数的符号用(11)表示。
3. 采用双符号位的方法进行溢出检测时,若运算结果中两个符号位(不相同),则表明发生了溢出。
若结果的符号位为(01),表示发生正溢出;若为(10),表示发生负溢出。
4. 采用单符号位进行溢出检测时,若加数与被加数符号相同,而运算结果的符号与操作数的符号(不一致),则表示溢出;当加数与被加数符号不同时,相加运算的结果(不会产生溢出)。
5. 利用数据的数值位最高位进位C和符号位进位Cf的状况来判断溢出,则其表达式为over=(C⊕Cf)。
6. 在减法运算中,正数减(负数)可能产生溢出,此时的溢出为(正)溢出;负数减(正数)可能产生溢出,此时的溢出为(负)溢出。
7. 补码一位乘法运算法则通过判断乘数最末位Yi和Yi-1的值决定下步操作,当YiYi-1=(10)时,执行部分积加【-x】补,再右移一位;当YiYi-1=(01)时,执行部分积加【x】补,再右移一位。
8. 浮点加减运算在(阶码运算溢出)情况下会发生溢出。
9. 原码一位乘法中,符号位与数值位(分开运算),运算结果的符号位等于(两操作数符号的异或值)。
10. 一个浮点数,当其补码尾数右移一位时,为使其值不变,阶码应该(加1)。
11. 左规的规则为:尾数(左移一位),阶码(减1)。
12. 右规的规则是:尾数(右移一位),阶码(加1)。
13. 影响进位加法器速度的关键因素是(进位信号的传递问题)。
14. 当运算结果的补码尾数部分不是(11.0×××××或00.1×××××)的形式时,则应进行规格化处理。
当尾数符号位为(01)或(10)时,需要右规。
《计算机原理学习指导》第三章综合练习题参考答案一、填空题1 、在计算机中,凡是带符号的数一律用补码表示,其运算也是用补码表示的。
2 、在补码系统中,求补就是求一个与其相反的数。
3 、在计算机中,基本的运算有加法和减法。
4 、 X=0.100101 , Y=0.001101 ,则 X+Y=0.110010 。
5 、 X=0.1101 , Y=-0.0101 ,则 X+Y=0.1000 。
6 、 X=-0.10101 , Y=-0.01101 ,则 X+Y=0.1110 (溢出)。
7 、 X=0.10101 , Y=0.01010 ,则 X-Y=0.01011 。
8 、 X=-0.11011 , Y=-0.0110 ,则 X-Y=-0.0111 。
9 、在计算机中,无符号数经常用于表示存储单元的地址。
10 、 B3H ∧ 7FH=33H , 3BH ∨ FFH=FFH 。
二、单项选择题1 、原码加减法运算是( C )。
A .操作数用原码表示,连同符号位直接相加减B .操作数用原码表示,尾数直接相加减,符号位单独处理C .操作数用原码表示,根据两数的符号决定实际操作,符号位单独处理D .操作数取绝对值,直接相加减,符号单独处理2 、补码加减法运算是( C )A .操作数用补码表示,两数的尾数相加减,符号位单独处理,减法用加法代替B .操作数用补码表示,符号位与尾数一起参加运算,结果的符号与加减所得相同C .操作数用补码表示,连同符号位直接相加减,减某数用加负某数的补码代表,结果的符号在运算中形成D .操作数用补码表示,由数符决定两尾数的操作,符号位单独处理3 、计算机中实现减法运算使用的方法是( C )A .从被减数中减去减数B .从减数中减去被减数再求反C .转换为补码的加法运算D .依减数的形式再选择一种适当的方法4 、在微型计算机中,运算器的总线经常使用( D )。
A .单总线结构B .双总线结构C .三总线结构D .以上都是5 、运算器在运算的过程当中,得到的标志位中没有( D )。
3.1 已知[x]补和[y]补的值,用补.码加减法计算x+y和x-y(写出结果的二进制表示和十进制表示),并指出结果是否溢出以及溢出的类型(建议采用变形补码计算)。
(1) [x]补=0.11011 , [y]补=0.00011(2) [x]补=0.10111 [y]补=1.00101(3) [x]补=1.01010 [y]补=1.10001(4) [x]补=1.10011 [y]补=0.11001解:(1) [x]补=0.11011 , [y]补=0.00011[-y]补=1.11101[X+Y]补=[x]补+[y]补= 00.11011+ 00.00011__________________00.11110X+Y= +15/16 =+0.1111B[X-Y]补=[x]补+[-y]补=00.11011+11.11101__________________00.11000X-Y= +12/16 =+3/4=+0.11B检验【X= + 27/ 32Y= +3/32X+Y = +(27+3)/32 =+30/32=0.11110BX-Y = (27-3)/32=+24/32=+3/4=0.11B 】(2) [x]补=0.10111 , [y]补=1.00101[Y]原=1.11011[-y]补=0.11011[X+Y]补=[x]补+[y]补= 00.10111+ 11.00101__________________11.11100X+Y=-0.001B=-1/8[X-Y]补=[x]补+[-y]补= 00.10111+00.11011________________01.10010 (上溢)[X-Y]补=1.10010 (上溢)【修正:X-Y=-0.01110 = -7 / 16+2 = 25 / 16 】检验【X= +23/ 32Y=-27/32X+Y = (23-27)/32 =-4/32=-1/8X-Y = (23+27)/32=+50/32 =25/16 (上溢) 】(3) [x]补=1.01010 , [y]补=1.10001[-y]补=0.01111[X+Y]补=[x]补+[y]补= 11.01010+ 11.10001__________________10.11011X+Y=0.11011B=+27/32[ 修正27/32-2=27-64=-37/32 ][X-Y]补=[x]补+[-y]补= 11.01010+ 00.01111________________11.11001X-Y=-0.00111B=-7/32检验【X= -22/ 32=-11/16Y=-15/32X+Y = (-15-22) /32 =-37/32 (下溢)X-Y = (-22-(-15)) / 32 =-7/32 】(4) [x]补=1.10011 , [y]补=0.11001[ X= -0.01101=-13/ 32Y= +0.11001=25/32X+Y = (-13+25)/32 =12/32=3/8X-Y = (-13-25)/32=-38/32 = -19 / 16 (下溢) ][-y]补=1.00111[X+Y]补=[x]补+[y]补= 11.10011+ 00.11001__________________00.01100X+Y=0.01100B=3/8[X-Y]补=[x]补+[-y]补= 11.10011+ 11.00111________________10.11010 (下溢)[X-Y]补=0.11010 (下溢)【修正:X-Y = 13 / 16 – 2 = -19 / 16 】检验【X= -0.01101=-13/ 32Y= +0.11001=25/32X+Y = (-13+25)/32 =12/32=3/8X-Y = (-13-25)/32=-38/32 = -19 / 16 (下溢) 】3.2 给出x和y的二进制值,用补码加减法计算x+y和x-y(写出结果的二进制表示和十进制表示),并指出结果是否溢出以及溢出的类型(建议采用变形补码什算)、(1) x=0.10111 y=0.11011 (2) x=0.11101 y=0.10011(3) x=0.11011 y=-0.1010 (4) x=-0.11111 y=0.11011(5) x=-0.11011 y=0.1010 (6) x=-0.11010 y=-0.11001(7) x=-1011101 y=+1101101 (8) x=+1110110 y=-1001101 (9) x=+1101110 y=+1010101 (10) x=-1111111 y=-1101101 解:(1)X=0.10111 Y=0.11011[X]补=0.10111[Y]补=0.11011[-Y]补=1.00101[X+Y]补=[X]补+[Y]补= 00.10111+ 00.11011_______________________01.10010 (上溢)X+Y 上溢[X-Y]补=[X]补-[Y]补= 00.10111+ 11.00101_________________________11.11100X-Y=-0.00100=-1/8检验【X=23/32 Y=27/32X+Y=50/32[ 修正:X+Y=-0.0111 =-7 / 16 +2 =25 / 16 ]X-Y=-1/8】(2)X=0.11101 Y=0.10011[X]补=0.11101[Y]补=0.10011[-Y]补=1.01101[X+Y]补=[X]补+[Y]补= 00.11101+ 00.10011_______________________01.10000 (上溢)X+Y 上溢[X-Y]补=[X]补-[Y]补= 00.11101+ 11.01101_________________________00.01010X-Y=0.01010=5/16检验【X=29/32 Y=19/32X+Y=48/32 =3 / 2[ 修正:X+Y = -0.1 = -1 / 2+2 =1.5 ] X-Y=10/32=5 / 16】(3)X=0.11011 Y=-0.1010[X]补=0.11011[Y]补=1.01100[-Y]补=0.10100[X+Y]补=[X]补+[Y]= 00.11011+ 11.01100_______________________00.00111X+Y =7/32[X-Y]补=[X]补-[Y]补= 00.11011+ 00.10100_________________________01.01111X-Y=-0.10001=-17/32 (上溢)[ 修正-17/32+2=47/32 ]检验【X=27/32 Y=-20/32X+Y=7/32X-Y=47/32】(4)X=-0.11111 Y=0.11011[X]补=1.00001[Y]补=0.11011[-Y]补=1.00101[X+Y]补=[X]补+[Y]补= 11.00001+ 00.11011_______________________11.11100X+Y =-0.00100=-1/8[X-Y]补=[X]补-[Y]补= 11.00001+ 11.00101_________________________10.00110 (下溢)X-Y=0.00110=3/16 (下溢)[ 修正6/32-2=58/32 =29/16 ]检验【X=-31/32 Y=27/32X+Y=-4/32 =-1/8X-Y=58/32=29/16】(5)X=-0.11011 Y=0.10100[X]补=1.00101[Y]补=0.10100[-Y]补=1.01100[X+Y]补=[X]补+[Y]补= 11.00101+ 00.10100_______________________11.11011X+Y =-0.00111=-7/32[X-Y]补=[X]补-[Y]补= 11.00101+ 11.01100_________________________10.10001 (下溢)X-Y=17/32 (下溢)[ 修正17/32-2=-47/32 ]检验【X=-27/32 Y=20/32X+Y=-7/32X-Y=-47/32】(6)X=-0.11010 Y=-0.11001[X]补=1.00110[Y]补=1.00111[-Y]补=0.11001[X+Y]补=[X]补+[Y]补= 11.00110+ 11.00111_______________________10.01101X+Y =13/32 (下溢) [ 修正13/32-2=-51/32 ] [X-Y]补=[X]补-[Y]补= 11.00110+ 00.11001_________________________11.11111X-Y=-0.00001= -1/32检验【X=-26/32 Y=-25/32X+Y=-51/32X-Y=-1/32】(7) X=-1011101 Y=+1101101 [X]补=10100011[Y]补=01101101[-Y]补=1.01100[X+Y]补=[X]补+[Y]补= 110100011+ 001101101_______________________000010000X+Y =00010000=16[X-Y]补=[X]补-[Y]补= 110100011+ 110010011_________________________100110110 (下溢) X-Y=54 (下溢)[ 修正54-256=-202 ]检验【X=-93 Y=109X+Y=16X-Y=-202】(8) X=+1110110 Y=-1001101 [X]补=01110110[Y]补=10110011[-Y]补=01001101[X+Y]补=[X]补+[Y]补= 001110110+ 110110011_______________________000101001X+Y =41[X-Y]补=[X]补-[Y]补= 0011101101+ 001001101_________________________011000011 (上溢)X-Y=-61 (上溢)[ 修正-61+256=195 ]检验【X=118 Y=-77X+Y=41X-Y=195】(9)X=+1101110 Y=+1010101[X]补=01101110[Y]补=01010101[-Y]补=10101011[X+Y]补=[X]补+[Y]补= 001101110+001010101_______________________011000011 (上溢)X+Y =-0111101=-61 [ 修正-61+256=195 ] [X-Y]补=[X]补-[Y]补= 001101110+ 110101011_________________________000011001X-Y=25检验【X=110 Y=85X+Y=195X-Y=25】(10) X=-1111111 Y=-1101101[X]补=10000001[Y]补=10010011[-Y]补=01101101[X+Y]补=[X]补+[Y]补= 110000001+ 110010100_______________________100010100 (下溢)X+Y =00010100=20 [ 修正20-256=-236 ] [X-Y]补=[X]补-[Y]补= 110000001+ 001101101_________________________111101110检验【X-Y=-0010010=-18X=-127 Y=-109X+Y=-236X-Y=-18】。