1 / 92

二、进位制数之间的转换 1 、二进制数转换成十进制数 根据二进制数的定义,只要将它按权展开再相加。

二、进位制数之间的转换 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 余数

Download Presentation

二、进位制数之间的转换 1 、二进制数转换成十进制数 根据二进制数的定义,只要将它按权展开再相加。

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 二、进位制数之间的转换 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. 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

  3. ⑵ 小数部分,采用乘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

  4. 如果十进制小数不能用有限位的二进制数表示,则如果十进制小数不能用有限位的二进制数表示,则 根据精度取几位 例如:(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. 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进制数。

  6. 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

  7. 三、二进制编码 1、二进制编码的十进制数(BCD码) BCD码是用4 位二进制数码来表示一位十进制数字。通常采用8421码。

  8. 例如:(117.574)10= (1110101.1001)2(小数后取4位) = (1,0001,0111.0101,0111,0100)BCD 2、字母与字符的编码 微机中普遍采用ASCII码,用7位二进制数来表示。 3、汉字的编码 ⑴ 汉字的输入编码 直接用西文键盘输入汉字,通常采用以下三类: ① 数字编码 常用的是国标区位码,用数字串代表一个汉字输入, 以国 家颁布的两级汉字为例。6763个两级汉字分为94个区,每个区 分94位,例如“中”字位于第54区48位,则他的区位码是5448。

  9. GB2312分成94行×94列,行号称为区号,列号称为位号。 7位区号在左, 7位列号在右,共14位,这是汉字的区位 码。将区位码的区号和位号各加32(即100000)变换成 国标码。 区位码是: 0010011 0000011 (13H 03H) 其国标码则为: 0110011 0100011 (33H 23H) “中”的区位码是5448 即36H 30H,国标码是56H 50H。 ② 拼音码,输入简单,但输入重码率很高。 ③ 字形编码 通常是五笔字形编码。 现在汉字输入的研究很多,输入的方法有几十种。 ⑵ 汉字内码 汉字内码用于汉字的存储、交换、检索等操作的机内 代码,一般采用两个字节表示。 例如:将汉字的国标码的区号和位号扩展成8位(即

  10. 四、二进制数的运算 (一)二进制数的算术运算 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

  11. ⑵ 部分积右移法 乘 数 被 乘 数 部分积 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(结果)

  12. 3、除法 例:1001111÷110 ≈1101 余1 0001101 110 1001111 110 111 110 111 110 1

  13. (二)二进制数的逻辑运算 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

  14. 4、“异或”运算 表达式:Y=A⊕B 规则:0 ⊕ 0 = 0 0 ⊕ 1 = 1 1 ⊕ 1 = 0 1 ⊕ 0 = 1 与、或、非是三种基本运算,其他逻辑运算都 可由这三种运算组合而成。 如:异或运算 同或运算 Y=A⊙B =

  15. 五、带符号数表示法 计算机中带符号的二进制数有四种编码方法:原码、反码、 补码和移码 1、原码 ⑴ 机器数与真值 一个数的符号位和数值位一起表示的二进制编码称为机器 数,机器数编码方法不同分为原码、反码、补码和移码;而 该机器数的十进制数值称为该数的真值。 无符号二进制数的每一位都是数值位。 例如:8位无符号二进制数00000000至11111111,其数值范围 为0 – 255。 8位有符号数的最高位表示符号,0表示正数,1表示负数, 其余7位是数值位,其原码表示范围为-127 - +127 例如:(01011011)2= +91 (11011011)2= -91 这里(11011011)2称为原码机器数, -91称为该机器数的 真值

  16. ⑵ 原码 ① 若定点小数的原码形式为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 原码表示简单易懂,由原码求真值很容易,但运算复杂。

  17. 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

  18. ⑶正数的反码与原码相同 例如: [+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

  19. 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

  20. ⑶ 正数的补码与原码相同 例如:[+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

  21. ⑺ 已知一个数的机器数,求其真值 要看机器数用哪一种编码表示,若是原码,则求真值简单, 直接按权展开相加即得;若是反码或补码,则先求该数的原码。 例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 ⑻ 补码运算 ①正数补码运算 与原码运算相同 ②负数补码运算 用补码可以将二进制数的减法运算转换为加法运算。

  22. [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

  23. 例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

  24. (9)n位二进制数的补码表

  25. 8位二进制数(包括符号位1位,有效 数值7位))表示的范围 原码:01111111— 11111111 +127 — -127 反码:01111111 — 10000000 +127 — -127 补码:01111111 — 10000000 +127 — -128 [-127]反=10000000,[-127]补=10000001 [-128]补=10000000

  26. (11) 溢出概念和检测方法 ① 溢出概念 各种数据编码都有其数据表示范围,如果在运算过程 中出现的数据超出这个表示的范围,称为溢出。 如8位二进制数原码表示的范围是-127到+127;8位二 进制数补码表示的范围是-128到+127等。 对于加法,只有在正数加正数和负数加负数两种情况 才会产生溢出,即符号相同的两个数相加可能会溢出的; 而符号不同的两个数相加是不会溢出的。 对于减法,只有在正数减负数和负数减正数两种情况 才会产生溢出,即符号不同的两个数相减可能会溢出的; 而符号相同的两个数相减是不会溢出。 溢出检测方法通常有三种: Ⅰ、根据参加运算的两个数和结果的符号位来判断:

  27. 两个符号位相同的补码相加,如果和的符号位与加数两个符号位相同的补码相加,如果和的符号位与加数 的符号相反,则表明运算结果溢出。 两个符号位相反的补码相减,如果差的符号位与被减 数的符号位相反,则表明运算结果溢出。 例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,则溢出判断的逻辑真值表如下: 根据真值表,可得判断溢出的逻辑表达式:

  28. 这种溢出判断方法不仅 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

  29. 两个符号位相反 的补码相减,如果 差的符号位与被减 数的符号位相反, 则表明运算结果溢 溢,表中v=1是溢出 行。 这里x0是被减数 的符号位;y0是减 数的符号位;z0是 差的符号位。

  30. Ⅱ、第二种方法是 采用双符号位法: 每个数的最高两位作为符号位,正常时,两个符号位 应相同,如正数为00,负数为11。若运算结果两个符号 位不同,表示发生了溢出。若结果符号位是01,表示结 果大于数范围的上线,称为上溢;若结果符号位是10, 表示结果小于数范围的下线,称为下溢。 例2:x= -1100B y= -1000B,求x+y 解:[x]补=110100,[y]补=111000(数前加两位符号位) [x+y]补= [x]补+ [y]补= 110100+111000=101100 符号位为10,表示下溢,即负溢出 Ⅲ、第三种方法是简单判别法: 利用数据编码的最高位(符号位)和次高位(数值部 分的最高位)的进位状况来判断运算结果是否溢出。 两个补码数据实现加减运算时,若最高数值位向符号

  31. 位的进位值与符号位产生的进位输出值不相同,则表示位的进位值与符号位产生的进位输出值不相同,则表示 加减(减法也用补码加法做)运算产生了溢出。即 这里,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,结果溢出。这里,两个正数相加,和的 符号位为负数,也可判断是溢出。

  32. 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 表示负号。 将移码与补码比较,可以发现只是符号位不同,其余位相同。

  33. 例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

  34. 5、四种编码的表示

  35. 六、定点数和浮点数 1、定点数:数据的小数点位置是固定不变的,定点 整数的小数点定在最低位的右边(纯整数);定点 小数的小数点定在最高位的左边(纯小数)。 设任意定点数x= x0x1 x2… xn,在定点机中可表示 为如下形式: 符号 尾数 如果x是纯小数,则小数点位置在x0和x1之间,此 时数的表示范围为: 0 ≤ x ≤1 - 2-n

  36. 如果x表示的是纯整数,则小数点在最低位xn的右边,此时如果x表示的是纯整数,则小数点在最低位xn的右边,此时 数的表示范围位: 0 ≤ x ≤2n - 1 2、浮点数:小数点的位置可以浮动的数称为浮点数。浮点数的一般表示如下: N=(-1)S M·RE 其中M是浮点数N的尾数,而R是基数,E是阶码,S为数据 的符号位。计算机内浮点数的基数通常是2。M用定点小数表 示,决定了浮点数的精度。规定尾数用纯小数形式给出,并 采用规格化的表示方法。E是带符号的定点数,一个浮点数 可以表示如下:

  37. 阶码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),采 用双符号位和补码表示。

  38. [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

  39. ② 乘除法 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,否则要修改阶 码同时移动小数点的位置,使其满足这一要求,这个 过程称为浮点数的规格化。

  40. 浮点数规格化的定义是使尾数应满足: 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。

  41. 移动小数点的位置,使其尾数变成其标准格式。当尾数用补移动小数点的位置,使其尾数变成其标准格式。当尾数用补 码表示时,规格化后的正尾数的第一位为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

  42. 符号位为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

  43. ② 尾数求和 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 ⑤ 检查阶码是否溢出,判断方法同前面讲的。

  44. ⑶ 浮点数的表示范围 已知浮点数的阶码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

  45. 七、定点数乘除法运算 (一)原码一位乘法 原码乘法将符号位与数值位分开进行运算,运算结 果的符号位是乘数和被乘数符号位的异或,结果的数 值部分是乘数和被乘数数值部分的乘积。 图2-11是32位定点原码一位乘法的结构图,32位 被乘数在R2中,运算开始时32位乘数放在R1中,R0 为部分积,开始为0。64位乘积的高位在R0中,低位 在R1中,R0、R1可以串联移位。 定点原码一位乘法的规则如图2-12所示。对于32 位乘法需要循环32次。由于每次根据乘数的一位进行 操作,故称为一位乘法。

  46. R2:被乘数;R1:乘数 R0:部分积 R0R1:乘积

  47. 例1:用原码一位乘法 进行2×3的四位乘法。 R0=0000,部分积 R1=0011,乘数 R2=0010,被乘数 根据乘数最低位是1 还是0决定部分积R0 是否加被乘数。 乘数最低位是1,加 被乘数;是0不加被 乘数;每次循环R0和 R1要右移一位。 参见表2-8

  48. (二)补码一位乘法 比较好的带符号数乘法是布斯(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。

  49. R2=0010,R1=1101,R0=0000 被乘数 乘数 部分积 结果11111010为负数(补码)

  50. 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。

More Related