920 likes | 1.05k Views
二、进位制数之间的转换 1 、二进制数转换成十进制数 根据二进制数的定义,只要将它按权展开再相加。 例如: (111.101) 2 =1 ×2 2 +1 × 2 1 +1 × 2 0 + 1 × 2 -1 + 0× 2 -2 + 1 × 2 -3 = (7.625) 10 2 、十进制数转换成二进制数 ⑴整数部分,采用除 2 取余法(或倒除法) 例如:将 (215) 10 转换成二进制数. 2 215 余数
E N D
二、进位制数之间的转换 1、二进制数转换成十进制数 根据二进制数的定义,只要将它按权展开再相加。 例如:(111.101)2=1×22 +1 ×21 +1 × 20 + 1 × 2-1 + 0× 2-2 + 1 × 2-3 = (7.625)10 2、十进制数转换成二进制数 ⑴整数部分,采用除2取余法(或倒除法) 例如:将(215)10转换成二进制数
2 215 余数 • 2 107 1 • 2 53 1 • 2 26 1 • 2 13 0 • 2 6 1 • 2 3 0 • 2 1 1 • 0 1 结果 (215)10 = (11010111)2 或写为:215D= 11010111B
⑵ 小数部分,采用乘2取整法 例如:将(0.6875)10转换成二进制数 0.6875 取整数部分 × 2 1.3750 1 0.3750 × 2 0.7500 0 × 2 1.5000 1 0.5000 × 2 1.0000 1 0.0000 结果 (0.6875)10 = (0.1011)2
如果十进制小数不能用有限位的二进制数表示,则如果十进制小数不能用有限位的二进制数表示,则 根据精度取几位 例如:(0.414)10 ≈ (0.01101)2(取5位) 或写为: 0.414D ≈ 0.01101B(取5位) 3、八进制数转换成十进制数 根据八进制数的定义,只要将它按权展开再相加。 例如:(14)8= 1×81 +4 × 80= (12)10 或写为:14Q= 1×81 +4 × 80= 12D = 12 4、十六进制数转换成十进制数 根据十六进制数的定义,只要将它按权展开再相加。 例如:(A4)16= 10×161 +4 × 160= (164)10 或写为:A4H = 10×161 +4 × 160= 164D = 164
5、十进制数转换成八进制数 与十进制数转换成二进制数相似,采用除8取余法(整数) 和乘8取整法(小数)。 6、十进制数转换成十六进制数 与十进制数转换成二进制数相似,采用除16取余法(整数) 和乘16取整法(小数)。 例如:将(843.6875)10转换为十六进制数 16 843 取余数 0.6875 取整数 16 52 B × 16 16 3 4 4.1250 0 3 6.875 B.0000 B 结果 (843.6875)10 =(34B.B)16 通常,先将十进制数转换成二进制数,再由二进制数转换成 8进或16进制数。
7、八进制数与二进制数之间的转换 一位八进制数相当于3位二进制数,所以八进制数转 换成二进制数,或二进制数转换成八进制数很方便。 例如:(563)8 = (101,110,011)2 (0.764)8= (0.111,110,100)2 8、十六进制数与二进制数之间的转换 一位十六进制数相当于4位二进制数,所以十六进制 数与二进制数之间的转换是很方便的。 例如:(3AB)16 = (0011,1010,1011)2 (0.CD3)16 = (0.1100,1101,0011)2
三、二进制编码 1、二进制编码的十进制数(BCD码) BCD码是用4 位二进制数码来表示一位十进制数字。通常采用8421码。
例如:(117.574)10= (1110101.1001)2(小数后取4位) = (1,0001,0111.0101,0111,0100)BCD 2、字母与字符的编码 微机中普遍采用ASCII码,用7位二进制数来表示。 3、汉字的编码 ⑴ 汉字的输入编码 直接用西文键盘输入汉字,通常采用以下三类: ① 数字编码 常用的是国标区位码,用数字串代表一个汉字输入, 以国 家颁布的两级汉字为例。6763个两级汉字分为94个区,每个区 分94位,例如“中”字位于第54区48位,则他的区位码是5448。
GB2312分成94行×94列,行号称为区号,列号称为位号。 7位区号在左, 7位列号在右,共14位,这是汉字的区位 码。将区位码的区号和位号各加32(即100000)变换成 国标码。 区位码是: 0010011 0000011 (13H 03H) 其国标码则为: 0110011 0100011 (33H 23H) “中”的区位码是5448 即36H 30H,国标码是56H 50H。 ② 拼音码,输入简单,但输入重码率很高。 ③ 字形编码 通常是五笔字形编码。 现在汉字输入的研究很多,输入的方法有几十种。 ⑵ 汉字内码 汉字内码用于汉字的存储、交换、检索等操作的机内 代码,一般采用两个字节表示。 例如:将汉字的国标码的区号和位号扩展成8位(即
四、二进制数的运算 (一)二进制数的算术运算 1、加减法 规则: 0+0= 0 , 0+1=1, 1+0 =1 ,1+1= 0(进位1) 0-0= 0 , 1-0 =1 ,1-1= 0 ,0-1=1 (有借位) 例: 11000100 11000100 +00100101 - 00100101 11101001 10011111 2、乘法 1111 规则:0×0=0,0 ×1=0,1 ×0=0,1 ×1=1 × 1101 ⑴被乘数左移法 1111 1111 ×1101 0000 = 11000011 1111 1111 11000011
⑵ 部分积右移法 乘 数 被 乘 数 部分积 1101 1111 0000 ①乘数最低位为1,加被乘数 1111 部分积右移 0111 1 ②乘数次低位为0,不加被乘数 0011 11 部分积右移 1111 ③乘数第2位为1,加被乘数 10010 11 部分积右移 1001 011 ④乘数第1位为1,加被乘数 1111 部分积右移 11000 011 只需要4位加法器 1100 0011(结果)
3、除法 例:1001111÷110 ≈1101 余1 0001101 110 1001111 110 111 110 111 110 1
(二)二进制数的逻辑运算 1、“与”运算 表达式: Y=A×B,Y=A∧B ,Y=A·B 规则: 0 × 0 = 0 0 ×1 = 0 1 ×0 = 0 1 ×1 =1 2、“或”运算 表达式: Y=A+B,Y=A∨B 规则: 0 +0 = 0 0 +1 = 1 1 +0 = 1 1 +1 =1 3、“非”运算 Y= A 0 = 1 1 = 0
4、“异或”运算 表达式:Y=A⊕B 规则:0 ⊕ 0 = 0 0 ⊕ 1 = 1 1 ⊕ 1 = 0 1 ⊕ 0 = 1 与、或、非是三种基本运算,其他逻辑运算都 可由这三种运算组合而成。 如:异或运算 同或运算 Y=A⊙B =
五、带符号数表示法 计算机中带符号的二进制数有四种编码方法:原码、反码、 补码和移码 1、原码 ⑴ 机器数与真值 一个数的符号位和数值位一起表示的二进制编码称为机器 数,机器数编码方法不同分为原码、反码、补码和移码;而 该机器数的十进制数值称为该数的真值。 无符号二进制数的每一位都是数值位。 例如:8位无符号二进制数00000000至11111111,其数值范围 为0 – 255。 8位有符号数的最高位表示符号,0表示正数,1表示负数, 其余7位是数值位,其原码表示范围为-127 - +127 例如:(01011011)2= +91 (11011011)2= -91 这里(11011011)2称为原码机器数, -91称为该机器数的 真值
⑵ 原码 ① 若定点小数的原码形式为x0 . x1x2…xn,则原码定义是: x 1 >x ≥ 0 [x]原= 1-x = 1+ x 0 ≥ x > -1 式中[x]原是机器数,用带符号二进制数编码表示;x 是带+ 或-符号的一般二进制数表示,它的十进制数值称为真值。 例如:x = +0.1001B,则[x]原= 0.1001B, x的真值= +0.5625 x = - 0.1001B,则[x]原= 1.1001B, x的真值= - 0.5625 ② 若定点整数的原码形式为x0 x1x2…xn,则原码定义是: x 2n>x ≥ 0 [x]原= 2n – x = 2n + x 0 ≥ x > - 2n ③ 0的原码(8位) [+0]原= 00000000 ; [-0]原= 10000000 原码表示简单易懂,由原码求真值很容易,但运算复杂。
2、反码 所谓反码就是二进制数各位数码0变为1,1变为0, 通常称为取反,用上横线表示。如x=0,则 x =1。 ⑴ 定点小数反码的定义 x 1 >x ≥ 0 [x]反= (2 – 2-n)+ x 0 ≥ x > -1 ⑵定点整数反码的定义 x 2n>x ≥ 0 [x]反= ( 2n+1 – 1 )+ x 0 ≥ x > - 2n
⑶正数的反码与原码相同 例如: [+105]原= 01101001 [+105]反= 01101001 ⑷负数的反码 :该负数的原码按位(除符号位外) 取反 例如: x= -1101001B= -105 [-105]原 = 11101001 [-105]反= ( 28 – 1 )+ x =11111111 - 1101001 = 10010110 ⑸ 0的反码 [+0]原= 00000000 [+0]反= 00000000 [- 0]原= 10000000 [- 0]反= 11111111
3、补码 ⑴ 定点小数补码的定义 定点小数补码形式为x0 . x1x2…xn,则补码定义如下: x 1 >x ≥ 0 [x]补= (mod 2) 2 + x = 2 - x 0 ≥ x > -1 ⑵ 定点整数补码的定义 定点整数补码形式为x0 x1x2…xn,则补码定义如下: x 2n>x ≥ 0 [x]补= (mod 2n+1) 2n+1 + x = 2n+1 - x 0 ≥ x > - 2n
⑶ 正数的补码与原码相同 例如:[+4]补= [+4]反 = [+4]原 = 00000100 [+127]补= [+127]反 = [+127]原 = 01111111 ⑷ 负数的补码为该负数的原码按位(除符号位外) 取反后再在最低位加1;或者为该负数对应的反码, 在最低位加1 例如:x = - 4 = - 0000100B (n=7) [- 4]原 = 10000100 [- 4]反 = 11111011 [- 4]补 = 11111100 [- 4]补= 27+1 +(– 0000100 )= 28 – 0000100 = 11111100 ⑸ 0的补码: [+0]补= [+0]反= [+0]原= 00000000 [- 0]补= [- 0]反+1=11111111+1= 00000000 [+0]补= [- 0]补= 00000000 ⑹ -128的补码: [- 128]补= 10000000
⑺ 已知一个数的机器数,求其真值 要看机器数用哪一种编码表示,若是原码,则求真值简单, 直接按权展开相加即得;若是反码或补码,则先求该数的原码。 例1:已知 [x]补= 11111100,求x的真值 先求x的原码,如果x是正数,原码与补码相同;如果x是负数, 则将该数的补码按位(除符号位)取反后,在最低位加1。 [x]原= 10000100,x = - 4 例2: [x]补= 10010100 则 [x]原= 11101011+1=11101100 x = -(1×26+ 1×25+ 0×24+ 1×23+ 1×22+ 0×21+ 0×20) = - (64+32+0+8+4+0+0)= - 108 ⑻ 补码运算 ①正数补码运算 与原码运算相同 ②负数补码运算 用补码可以将二进制数的减法运算转换为加法运算。
[X+Y]补= [X]补+ [Y]补 [X - Y]补=[X]补+[-Y]补= [X]补- [Y]补 补码的减法运算,可以归纳为:先求[X]补 、再求 [-Y]补 ,然后进行补码的加法运算。 补码加减法的结果仍然是补码,要得到结果的真值 ,必须求它对应的原码,再按定义展开相加。 已知[Y]补,求[-Y]补 [-Y]补= [[Y]补]补,包括符号位在内的所有位取 反,再在最低位加1。 例如,已知[Y]补=[+4]补= 00000100,Y= +4 则 [-Y]补= [- 4]补=[[Y]补]补= [[+4]补]补=11111100
例1:求64 – 10 ,用补码做 解:设 z = 64 – 10 = 64+(- 10) [+64]补=01000000 ,[- 10]原= 10001010 [- 10]补= 11110110,或 [[10]补]补=[00001010]补=11110110 [z]补= [64-10]补=[+64]补+ [- 10]补= 01000000 +11110110 = 00110110 结果为正数,所以 z = +54 例2:求34 – 68 解:设 z = 34 – 68 = 34+(- 68) [+34]补=00100010 , [- 68]原= 11000100 [- 68]补= 10111100 [z]补=[+34]补+ [- 68]补=00100010 +10111100 = 11011110 结果为负数,[z]原= 10100010 ,z = - 34
8位二进制数(包括符号位1位,有效 数值7位))表示的范围 原码:01111111— 11111111 +127 — -127 反码:01111111 — 10000000 +127 — -127 补码:01111111 — 10000000 +127 — -128 [-127]反=10000000,[-127]补=10000001 [-128]补=10000000
(11) 溢出概念和检测方法 ① 溢出概念 各种数据编码都有其数据表示范围,如果在运算过程 中出现的数据超出这个表示的范围,称为溢出。 如8位二进制数原码表示的范围是-127到+127;8位二 进制数补码表示的范围是-128到+127等。 对于加法,只有在正数加正数和负数加负数两种情况 才会产生溢出,即符号相同的两个数相加可能会溢出的; 而符号不同的两个数相加是不会溢出的。 对于减法,只有在正数减负数和负数减正数两种情况 才会产生溢出,即符号不同的两个数相减可能会溢出的; 而符号相同的两个数相减是不会溢出。 溢出检测方法通常有三种: Ⅰ、根据参加运算的两个数和结果的符号位来判断:
两个符号位相同的补码相加,如果和的符号位与加数两个符号位相同的补码相加,如果和的符号位与加数 的符号相反,则表明运算结果溢出。 两个符号位相反的补码相减,如果差的符号位与被减 数的符号位相反,则表明运算结果溢出。 例1:x= -0.1101, y= -0.1011 求[x+y]补 解: [x]补=1.0011 [y]补=1.0101 [x+y]补=[x]补+[y]补=1.0011+1.0101=10.1000 [x+y]补= 0.1000 即两个负数相加,结果是正数,所以溢出 若加法运算的两个数为X、Y,结果为Z,他们的符号位 分别是x0、y0、z0,则溢出判断的逻辑真值表如下: 根据真值表,可得判断溢出的逻辑表达式:
这种溢出判断方法不仅 X0 Y0 Z0 V 需要判断加法运算的结 0 0 0 0 果,而且需要保持原操 0 0 1 1 作数,比较麻烦。 0 1 0 0 表中,V=1的两行是溢 0 1 1 0 出行。 1 0 0 0 同理,可写出减法的 1 0 1 0 溢出真值表和逻辑表达 1 1 0 1 式 如下: 1 1 1 0
两个符号位相反 的补码相减,如果 差的符号位与被减 数的符号位相反, 则表明运算结果溢 溢,表中v=1是溢出 行。 这里x0是被减数 的符号位;y0是减 数的符号位;z0是 差的符号位。
Ⅱ、第二种方法是 采用双符号位法: 每个数的最高两位作为符号位,正常时,两个符号位 应相同,如正数为00,负数为11。若运算结果两个符号 位不同,表示发生了溢出。若结果符号位是01,表示结 果大于数范围的上线,称为上溢;若结果符号位是10, 表示结果小于数范围的下线,称为下溢。 例2:x= -1100B y= -1000B,求x+y 解:[x]补=110100,[y]补=111000(数前加两位符号位) [x+y]补= [x]补+ [y]补= 110100+111000=101100 符号位为10,表示下溢,即负溢出 Ⅲ、第三种方法是简单判别法: 利用数据编码的最高位(符号位)和次高位(数值部 分的最高位)的进位状况来判断运算结果是否溢出。 两个补码数据实现加减运算时,若最高数值位向符号
位的进位值与符号位产生的进位输出值不相同,则表示位的进位值与符号位产生的进位输出值不相同,则表示 加减(减法也用补码加法做)运算产生了溢出。即 这里,C0是两个符号位和最高数值位的进位C1相加产生 的进位,C1是最高数值位相加的进位。V=1,表示溢出。 例3:设x = +1011B,y = +1001B,求[x+y]补: 解: [x]补= 01011, [y]补= 01001 [x+y]补= [x]补+ [y]补= 01011+01001=10100 C1 = 1, C0 = 0 ,V = C0⊕ C1= 1 所以V= 1,结果溢出。这里,两个正数相加,和的 符号位为负数,也可判断是溢出。
4、移码 若定点整数移码形式为x0 x1x2…xn时,移码的定义为: [x]移=2n + x 2n> x ≥ - 2n 式中[x]移为机器数,x的十进制数值为真值 例1:x = -1010011B ,则 x = - 83 [x]原= 11010011 [x]补= 10101101 [x]移= 00101101 [x]移= 27+x = 27 - 1010011= 10000000 + 10101101 = 00101101 在带符号的移码中,最高位仍是符号位,但1表示正号,0 表示负号。 将移码与补码比较,可以发现只是符号位不同,其余位相同。
例2: 设x= +1010B,y= -1010B 求x、y的移码 解:[x]移=10000 + 1010 = 11010 ( n = 4 ) [y]移=10000 – 1010 = 00110 或 [x]补=01010, [y]补=10110 [x]移=10000 + 01010=11010 [y]移=10000 + 10110=00110 例3:零的移码(8位) [+0]移= [-0]移= 10000000
六、定点数和浮点数 1、定点数:数据的小数点位置是固定不变的,定点 整数的小数点定在最低位的右边(纯整数);定点 小数的小数点定在最高位的左边(纯小数)。 设任意定点数x= x0x1 x2… xn,在定点机中可表示 为如下形式: 符号 尾数 如果x是纯小数,则小数点位置在x0和x1之间,此 时数的表示范围为: 0 ≤ x ≤1 - 2-n
如果x表示的是纯整数,则小数点在最低位xn的右边,此时如果x表示的是纯整数,则小数点在最低位xn的右边,此时 数的表示范围位: 0 ≤ x ≤2n - 1 2、浮点数:小数点的位置可以浮动的数称为浮点数。浮点数的一般表示如下: N=(-1)S M·RE 其中M是浮点数N的尾数,而R是基数,E是阶码,S为数据 的符号位。计算机内浮点数的基数通常是2。M用定点小数表 示,决定了浮点数的精度。规定尾数用纯小数形式给出,并 采用规格化的表示方法。E是带符号的定点数,一个浮点数 可以表示如下:
阶码E通常用整型数表示,它决定了该浮点数的表示范围,阶码E通常用整型数表示,它决定了该浮点数的表示范围, 阶码一般用补码或移码表示,尾数可用原码或补码表示。 例1:N1= 1011011.101011= 20111× 0.1011011101011 浮点数格式为 0,0111,1011011101011 N2= 0.0000110101=2-100 × 0.110101= 21100 × 0.110101 浮点数格式为 0,1100,110101 N3= -1010100.1001= 20111× 1.10101001001 浮点数格式为 1,0111,10101001001(尾数原码表示) 浮点数格式为 1,0111,01010110111(尾数补码表示) 浮点数通常也采用双符号位来表示,这时阶码的符号位和尾 数的符号位均为两位,书写格式如下: 例2:x = 2-0111× 0.11011011,y = 20101×(- 0.10110111),采 用双符号位和补码表示。
[x]浮= 11,1001,00.11011011 [y]浮= 00,0101,11.01001001 阶符 阶码 ,尾符 尾数 浮点数的规格化数值表示法: 例如:-3.5 = -11.1B= -0.111B × 22 1011B = 0.1011B × 24 -0.3125 = - 0.0101B = -0.101B × 2-1 ⑴ 浮点数的运算 ① 加减法:要先对阶,总是使小阶向大阶对齐 例3: N1=2011 × 0.1001 N2=2001 × 0.1100 解:对阶:N2=2001 × 0.1100 = 2011 × 0.0011 (小数点左移 2位,阶码加2) N1+N2 = 2011 × 0.1001+ 2011 × 0.0011 = 2011( 0.1001+ 0.0011 ) = 2011 × 0.1100
② 乘除法 N1=2j1×S1 N2=2j2×S2 则 N1 ×N=( 2j1×S1 ) ×( 2j2×S2) = 2(j1+j2) × (S1 ×S2) N1÷N2= 2(j1-j2) × (S1 ÷S2) ⑵ 浮点数的规格化 若不对浮点数作出明确规定,则同一个浮点数的表 示就不是唯一的。如0.1101可表示为0.01101×21,也 可表示为1.101×2-1。为了提高数据的精度,当尾数 的值不为0时,规定其绝对值应≥ 0.5,否则要修改阶 码同时移动小数点的位置,使其满足这一要求,这个 过程称为浮点数的规格化。
浮点数规格化的定义是使尾数应满足: 1/2 ≤ M < 1 显然,对正数,有M = 0.1xx…x;对负数,其补码形式为 1.0xx…x,原码形式为1. 1xx…x,这些是规格化的数。否则 就是非规格化数,规格化的方法是: 1、向左规格化 出现00 .0xx…x或11 .1xx…x(补码),就不是规格化数 (这里符号位用两位)。 向左规格化规则:尾数左移1位,阶码减1。 2、向右规格化 出现01 .xxx…x或10 .xxx…x,表示浮点运算中尾数运算的 结果的绝对值大于1,向左破坏了规格化。 向右规格化规则:尾数右移1位,阶码加1。
移动小数点的位置,使其尾数变成其标准格式。当尾数用补移动小数点的位置,使其尾数变成其标准格式。当尾数用补 码表示时,规格化后的正尾数的第一位为1,负尾数的第一位 为0,即正尾数为0.1xxxxxx;负尾数为1.0xxxxx。对原码,规 格化使得小数点后的第一位为1,不管是正数还是负数。 例4:将0.0011 ×20和-0.0011 ×20规格化(尾数为补码) 解:0.0011 ×20是正数,规格化后为0.1100 ×2-2(尾数左移 两位,阶码减2); -0.0011 ×20是负数,尾数的补码表示为 1.1101,尾数需要左移两位,规格化后为1.0100 ×2-2 例5: 将123D作规格化浮点数的编码,设1位符号位,基数 为2,阶码5位,采用移码表示,尾数10位,采用补码。 解:123D =1111011B = 0.1111011000×27 [7]移= 10000+00111=10111 [0.1111011000]补= 0.1111011000
符号位为0,所以浮点格式为: 0,10111,1111011000 例6: 将-0.00138D作规格化浮点数的编码,设1位符号位, 基数为2,阶码5位,采用移码表示,尾数10位,采用补码。 解:-0.00138D= - 0.0000000001011010011B = - 0.1011010011×2-9 [-9]移= 10000-01001= 00111 [- 0.1011010011]补=1.0100101101 符号位为1,所以浮点格式为:1,00111,0100101101 例7:两浮点数x =201×0.1101,y = 211 ×(-0.1010),求x+y 设两数在计算机中以补码表示,并采用双符号位。 解:[x]浮= 00 01,00.1101 [y]浮= 00 11,11.0110 ① 对阶 将x的尾数右移两位,[x]浮= 00 11,00.0011 01
② 尾数求和 00.0011 01 + 11.0110=11.1001 01 即得 x+y = 00 11,11.1001 01 ③ 规格化 该结果不是规格化数,需向左规格化,即尾数左移1位,阶 码减1,得 x+y = 00 10,11.0010 10 ④ 舍入,通常采用“0舍1入法”,得 x+y = 00 10,11.0011 ⑤ 检查阶码是否溢出,判断方法同前面讲的。
⑶ 浮点数的表示范围 已知浮点数的阶码3位(其中阶符1位,数值2位, 用补码表示),尾数5位(尾符1位,尾数4位,用 补码表示),小数点在尾数符号的右边求该浮点数 的表示范围: 即 2E × x . xxxx 最大正数:2011× 0.11112=23 ×15/16=7.5 最小正数:2100× 0.00012=2-4 ×1/16 = 1/256 最大负数:2100× 1.1111补=2-4 ×(-1/16)= - 1/256 最小负数:2011× 1.0000补=23 ×(-1)= - 8
七、定点数乘除法运算 (一)原码一位乘法 原码乘法将符号位与数值位分开进行运算,运算结 果的符号位是乘数和被乘数符号位的异或,结果的数 值部分是乘数和被乘数数值部分的乘积。 图2-11是32位定点原码一位乘法的结构图,32位 被乘数在R2中,运算开始时32位乘数放在R1中,R0 为部分积,开始为0。64位乘积的高位在R0中,低位 在R1中,R0、R1可以串联移位。 定点原码一位乘法的规则如图2-12所示。对于32 位乘法需要循环32次。由于每次根据乘数的一位进行 操作,故称为一位乘法。
R2:被乘数;R1:乘数 R0:部分积 R0R1:乘积
例1:用原码一位乘法 进行2×3的四位乘法。 R0=0000,部分积 R1=0011,乘数 R2=0010,被乘数 根据乘数最低位是1 还是0决定部分积R0 是否加被乘数。 乘数最低位是1,加 被乘数;是0不加被 乘数;每次循环R0和 R1要右移一位。 参见表2-8
(二)补码一位乘法 比较好的带符号数乘法是布斯(Booth)算法。如图 2-13所示。根据最低两个数据位是01还是10来决定加 被乘数还是减被乘数。初始时需要在最右边加一个辅 助位0。有关布斯算法的原理可参看“计算机组成原理” 例2:用Booth算法计算2×(-3) 解:R2=[2]补= 0010 , R1=[-3]补= 1101 乘法开始前,R2 = 0010,R0 = 0000,R1=1101, 辅助位P=0。 1、R1的最低位和辅助位P为10,所以进入步骤1c, 将R0的值减去R2的值,结果1110送入R0,然后进入 第2步,将R0和R1右移一位,结果为1111 0110,辅助 位为1。
R2=0010,R1=1101,R0=0000 被乘数 乘数 部分积 结果11111010为负数(补码)
2、R1的最低位和辅助位P为01,所以进入步骤1b,2、R1的最低位和辅助位P为01,所以进入步骤1b, 将R0的值加上R2的值,即1111+0010,结果0001送 入R0,然后进入第2步,将R0和R1右移一位,结果 为0000 1011,辅助位为0。 3、判断位为10,进入步骤1c,R0减去R2,结果 1110送入R0,然后进入第2步,将R0和R1右移一位, 结果为1111 0101,辅助位为1。 4、判断位为11,进入步骤1a,将R0和R1右移一 位,结果为1111 1010,辅助位为1。即运算结果的原 码为10000110,其真值为-6。