1、2022-12-16华东师范大学 电子系 马潮 副教授1微机原理及应用微机原理及应用第一章第一章 计算机中的数与编码计算机中的数与编码2022-12-16华东师范大学 电子系 马潮 副教授21.1 数制与转换数制与转换1.2 有符号二进制数的表示方法及溢出问题有符号二进制数的表示方法及溢出问题1.3 定点数和浮点数定点数和浮点数1.4 二进制编码的十进制数二进制编码的十进制数(BCD编码编码)1.5 ASCII字符代码字符代码1.6 汉字编码汉字编码第一章第一章 计算机中的数与编码计算机中的数与编码返回主目录2022-12-16华东师范大学 电子系 马潮 副教授3第一章第一章 计算机中的数与编
2、码计算机中的数与编码 计算机的最基本功能是进行数据的计算和处理加工。数在计算机中是以器件的物理状态来表示的。为了方便和可靠,在计算机中采用了二进制数字系统,即计算机中要处理的所有数据,都要用二进制数字系统来表示,所有的字母、符号、汉字也都要用二进制编码(不是数)来表示。在本章中,我们将介绍计算机中数制和码制的有关预备知识,其中有些内容已在“计算机应用基础”和“脉冲与数字电路”课程中讲过。由于它是学习微型计算机原理必不可少的基础知识,所以有必要进行复习。2022-12-16华东师范大学 电子系 马潮 副教授41.1 数和数制数和数制1.1.1 各种数制及其多项式表示法各种数制及其多项式表示法 在
3、人们应用各种数字符号表示事物个数的长期过程中形成了各种数制。数制是以表示数值所用的数字符号的个数来命名的,如十进制、十二进制、十六进制、六十进制等。各种数制中数字符号的个数称为该数制的基数。一个数可以用不同计算制表示它的大小,虽然形式不同,但数的量值则是相等的。在日常生活中,最常用的是十进制。2022-12-16华东师范大学 电子系 马潮 副教授5 1.十进制数十进制数 十进制采用 09 十个数字和一个小数点符号来表示任意十进制数。例如,374.53 代表百位为 3,十位 7,个位为 4,十分位为 5,百分位为 3 的十进制数。同一个数字在不同的数位代表的数值是不同的。这种记数方法称为位置记数
4、法。在位置记数法中,对每一个数位赋以不同的位值,称为“权”。对于十进制,每个数位上的权是 10 的某次幂,个位、十位及百位的权分别为 1、10 及 100。十分位、百分位的权分别为 10-1和 10-2。每个数位上的数字所表示的量是这个数字和该数位的权的乘积。因此,任意十进制数可按权展开为 10 的幂多项式。例如,374.53 的多项式表示形式为:2022-12-16华东师范大学 电子系 马潮 副教授6 3102+7101+4 100+510-1+310-2 对于n位整数m位小数的任意十进制数N,可用多项式表示如下:N10=Kn-110n-1+Kn-210n-2+K1101+K0100+K-1
5、10-1+K-210-2+K-(m-1)10-(m-1)+K-m 10-m inmiik 101 其中i表示数的第一位;Ki表示第i位的数字,它可以为 09 中的任一数字;m和n为正整数。式中 10 为十进制的基数。2022-12-16华东师范大学 电子系 马潮 副教授7 2.二进制数二进制数 人们习惯用十进制计数,但在电子计算机中,数是以器件的物理状态来表示的,计算机中采用双稳态电子器件作为保存信息的基本元件,因此计算机中采用二进制数。在二进制中,只有 0 和 1 两个数字。二进制数同样采用位置记数法,它的基数为 2,每个数位上的权是 2 的某次幂。对于n位整数m位小数的任意二进制数N2,可
6、以用多项式表示如下:)或10(212iinmiikkN2022-12-16华东师范大学 电子系 马潮 副教授8 例如:(1101.011)2=123+122+021+120+02-1+12-2+12-3 3.十六进制数十六进制数 计算机中采用二进制数,优点是物理实现容易且运算特别简单,缺点是书写冗长。因此常用十六进制(或有时用八进制)代替二进制来书写数据。在十六进制中,有 0,1,,9,A,B,C,D,E,F等十六个数字符号,其中A、B、C、D、E、F分别与十进制中的 10、11、12、13、14、15 这 6 个数相对应。十六进制数同样采用位置记数法,其基数 16,每一数位上的权是 16 的
7、某次幂。2022-12-16华东师范大学 电子系 马潮 副教授9 对于n位整数m位小数的任意十六进制数N16,可以用多项式表示如下:inmiikN16.116(Ki=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)例如(10AF.12)16=1163+0162+10161+15160+116-1+216-2 实际表示时,一个十六进制数如果最高位数字为字母(A-F),则字母前面必须加一个 0,以便与变量名等相区别。2022-12-16华东师范大学 电子系 马潮 副教授10 表 2.1 给出了以上四种数制的对应关系。为避免混淆,可在数字的后面加填不同数制的区分符。区分符可以是数字角
8、注,例如 53710或 537(十进制),11012(二进制),0EA216(十六进制),也可以用字母标注,其中:字母B(Binary)表示为二进制数;字母D(Decimal)或不加字母表示为十进制数;字母H(Hcxadccimal)表示为十六进制数。一般来说,对于基数为X的任一数可以用多项式表示为inmiiXXKN.12022-12-16华东师范大学 电子系 马潮 副教授11 Ki第i位的系数,可以为 0,1,,(X-1)共X个数字符号中任一数字符号;m,n幂指数,均为正整数;Xi第i位的权。教科书的第1页给出了计数制的标准定义。2022-12-16华东师范大学 电子系 马潮 副教授1220
9、22-12-16华东师范大学 电子系 马潮 副教授131.1.2各种数制的相互转换各种数制的相互转换 1.非十进制数转换成十进制数非十进制数转换成十进制数 非十进制数转换成十进制数比较简单,可先将其按定义展开为多项式,再将系数及权均用十进制表示按十进制进行乘法与加法运算,所得结果即为该数对应的十进制数。例1.1.1 将二进制数 1101.101 转换为十进制数。转换过程如下:1101.101B=123+122+021+120+12-1+02-2+12-3 =8+4+1+0.5+0.125 =13.625 1101.101B=13.6252022-12-16华东师范大学 电子系 马潮 副教授14
10、 例1.1.2 将十六进制数2AE.4转换为十进制数。2AE.4H=2162+10161+14160+416-1 =512+160+14+0.25 =686.25 2AE.4H=686.25 2.十进制数转换成非十进制整数十进制数转换成非十进制整数 (1)十进制整数转换成非十进制整数 设N为任一十进制整数,若要把它转换成n位X进制整数,则 N=011221110KXkXkXkXknnnninii2022-12-16华东师范大学 电子系 马潮 副教授15 显然,等式右边,除了最后一项K0以外,其余各项都包含基数X的因子,都能被X除尽。所以等式两边同除以基数X,余数正是要求的X进制数的最低位K0。
11、商为 K n-1 X n-2+K n-2 X n-3+K 2 X 1+K1 同理,上式中各项除K1外,其余各项都包含基数X的因子,都能被X除尽。所以再将商除以X,余数正是要求的X进制数的次低位K1,商为 K n-1X n-3+Kn-2Xn-4+K3X1+K2 如此一直进行下去,直到商等于 0 为止,就得到一系列余数,它们正是要求的X进制数的各位。2022-12-16华东师范大学 电子系 马潮 副教授16 这样我们可以把十进制整数转换为X进制整数的方法总结为用该数或商“除以基数取余数,先为低位后为高位”。例1.1.3 将十进制数 301 转换为二进制数。转换过程如下:301/2=150k0=19
12、/2=4k5=1 150/2=75k1=04/2=2k6=075/2=37k2=12/2=1k7=0|37/2=18k3=11/2=0k8=118/2=9k4=0 301=100101101B2022-12-16华东师范大学 电子系 马潮 副教授17 (2)十进制小数转换成非十进制小数 设N为任一十进制小数,若要把它转换为m位X进制小数,则N=K-1X-1+K-2X-2+K-mX-m(2-6)等式两边同乘以基数X,得到 K-1+K -2 X-1+K-3 X-2+K-mX-m+1 其中K-1为整数部分,它正好是所要求的X进制小数的最高位;而新的小数部分为 K-2X-1+K-3X-2+K-mX-m
13、+1若再将上式乘以X便得到 K-2+K-3X-1+K-mX-m+2imiiXk12022-12-16华东师范大学 电子系 马潮 副教授18 K-2为整数部分,它正好是所要求的X进制小数的次高位。如此继续进行下去,直到小数部分为零时止。若乘积的小数部分始终不为 0,说明相对应的X进制小数为不尽小数。这时,乘到能满足计算机精度要求为止。综上所述,我们可以把十进制小数转换为相应X进制小数的方法总线为对该小数或乘以X后新的小数部分“乘以基数取整数,先为高位后为低位”。例1.1.4 将 0.6875 分别转换为二进制及十六进制小数。转换为二进制的过程如下:0.68752=1.375 K-1=1 0.37
14、52=0.75 K-2=02022-12-16华东师范大学 电子系 马潮 副教授19 0.752=1.5 K-3=1 0.52=1.0 K-4=1 0.6875=0.1011B 转换为十六进制的过程如下:0.687516=11.0 K-1=B 0.6875=0.BH 例1.1.5 将 0.734 转换为二进制小数。转换过程如下:0.7342=1.468 K-1=1 0.4682=0.936 K-2=02022-12-16华东师范大学 电子系 马潮 副教授20 0.9362=1.872 K-3=1 0.8722=1.744 K-4=1 0.7442=1.488 K-5=1 0.4882=0.97
15、6 K-6=0 0.734=0.10110B 上面我们分别讨论了十进制整数转换为非十进制整数和十进制小数转换为非十进制小数的方法。如果一个任意十进制数要转换为非十进制数,我们可以把整数部分和小数部分分别加以转换,然后把转换后的整数部分和小数部分相加。2022-12-16华东师范大学 电子系 马潮 副教授21 例1.1.6 将十进制数 301.6875 分别转换为二进制和十六进制数。利用例1.1.3、例1.1.4 的结果,得到:301=100101101B,0.6875=0.1011B 301=12DH,0.6875=0.BH 301.6875=100101101.1011B 301.6875=
16、12D.BH 3.十六进制数与二进制数之间的转换十六进制数与二进制数之间的转换 由于 16=24,故 1 位十六进制数相当于4 位二进制数。这样,十六进制数与二进制数之间的相互转换是十分简便的。2022-12-16华东师范大学 电子系 马潮 副教授22 二进制数转换为十六进制数的方法是:首先从小数点开始分别向左和向右把整数及小数部分每 4 位分成一组。若整数最高位的一组不足 4 位,则在其左边加 0 补足 4 位;若小数最低位的一组不足 4 位,则在其右边加 0 补足 4 位。然后,用与每组二进制数所对应的十六进制数取代每组的 4 位二进制数,即得到对应的十六进制数。例1.1.7 二进制数 1
17、011101001.110101 转换为十六进制数的方法是:二进制数 0010 1110 1001.1101 0100十六进制数 2 E 9 .D 42022-12-16华东师范大学 电子系 马潮 副教授23 十六进制数转换为二进制数的方法是:用相应的 4 位二进制数取代每 1 位十六进制数。例1.1.8 十六进制数 5C7A.3B 转换为二进制的方法是:十六进制数 5 C 7 A .3 B二进制数 0101 1100 0111 1010 .0011 1011 5C7A.3BH=101110001111010.00111011B2022-12-16华东师范大学 电子系 马潮 副教授241.1.
18、3 二进制数的算术运算二进制数的算术运算 二进制计数制不仅物理实现容易,而且运算方法也十进制计数制大为简单。注意到二进制数加法是“逢二进一”和减法是“借一作二”的特点,再根据十进制数算术运算的方法,很容易理解和完成二进制数的算术运算。例1.1.9 10110101B+1111B。加法过程如下:被加数 10110101 加数 00001111 进位+111111 和 110001002022-12-16华东师范大学 电子系 马潮 副教授25 10110101B+111B=11000100B 由此可见,两个二进制数相加时,每 1 位有 3 个数(本位被加数和本位加数及低位来的进位)相加,得到本位的
19、和及向高的进位。例1.1.10 11000100B-100101B。减法过程如下:被减数 11000100 减数 00100101 借位 -111111 差 10011112022-12-16华东师范大学 电子系 马潮 副教授26 11000100B-100101B=1001111B 与加法相类似,两个二进制相减时,每 1 位有 3 个数(本位被减数,减数以及从低位来的借位)参加运算,本位被减数-本位减数-低位来的借位,即得到本位的差及向高位的借位。例1.1.11 1101B1011B。乘法过程如下:被乘数 1101 乘数 1011 1101 2022-12-16华东师范大学 电子系 马潮 副
20、教授27 1101 0000+1101积 10001111 1101B1011B=10001111B 对笔算来说,上述乘法过程不但是很清楚而且很方便,但对计算机来说,实现起来很不方便。有的微型计算机有专门的乘法指令来完成乘法运算。对于没有乘法指令的微型计算机,乘法是采用部分积右移的办法编制乘法运算程序来实现的。2022-12-16华东师范大学 电子系 马潮 副教授28例1.1.12 100110B110B。除法过程如下:0 0 0 1 1 0110100110 1 0 01 0 100110B110B=110B余10B 有的微型计算机有专门的除法指令来完成除法运算。对于没有除法指令的微型计算机
21、,常用“相减-左移”法编制除法运算程序实现除法。2022-12-16华东师范大学 电子系 马潮 副教授291.1.4二进制数的逻辑运算二进制数的逻辑运算 二进制数的逻辑运算常用的有“与”、“或”、“异或”及“非”运算等四种。在组成表达式时,可分别用符号“AND”、“OR”、“XOR”及“NOT”作为运算符,有时也用“”、“”、“”作为“与”、“或”、“异或”的运算符,用数学上面加横线“-”表示对该数进行非运算。二进制数的逻辑运算只按位进行运算。1 位二进制数运算规则如下:位二进制数运算规则如下:“与”运算的规则为:2022-12-16华东师范大学 电子系 马潮 副教授301 AND 0=00
22、AND 1=00 AND 0=01 AND 1=1“或”运算的规则为:0 OR 0=00 OR 0=10 OR 1=11 OR 1=12022-12-16华东师范大学 电子系 马潮 副教授31“异或”运算的规则为:0 XOR 0=01 XOR 0=10 XOR 1=11 XOR 1=0“非”运算的规则为:NOT 0=1NOT 1=0 多位二进制数进行逻辑运算时,可以利用二进制数运算规则按接进行运算。2022-12-16华东师范大学 电子系 马潮 副教授32 例1.1.13 二进制数 10010111 和 00111000 的“与”、“或”及“异或”。运算结果分别为:10010111 与)001
23、110000001000010010111或)001110001011111110010111异或)00111000 101011112022-12-16华东师范大学 电子系 马潮 副教授33 例1.1.14 二进制数 10010111 的“非”。运算结果为:01101000注意:*1个字节、2个字节表示的二进制整数范围 *简便的二十进制数转换方法2022-12-16华东师范大学 电子系 马潮 副教授341.2 有符号二进制数的表示方法及溢出问题有符号二进制数的表示方法及溢出问题1.2.1 有符号二进制数的表示方法有符号二进制数的表示方法 前面我们接触的二进制数均为无符号数,即所有二进制数位均
24、为数值位,在很多数据处理过程中需要这样看待某些数。然而实际的数值有时是带有符号的,既可能是正数,也可能是负数。这样就存在一个有符号二进制数的表示方法问题。1.数的符号表示方法数的符号表示方法 为了表示一个有符号数,除了数值位以外还应指定符号位,通常以这个数的最高位为符号位。我们假设讨论的数为整数。2022-12-16华东师范大学 电子系 马潮 副教授35 对 8 位有符号二进制整数,D7 为符号位,并规定D7 为 0 表示正数的符号“+”;为 1 表示负数的符号“-”。因此,8位有符号数的编码格式为:D7D6D5D4D3D2D1D0符号位 数值位 这样,数的符号在机器中也数字化了,符号位的数值
25、位一起完整地表示有符号二进制数。我们把一个数在机器中的表示形式称为机器数,而把它们的实际数值称为机器数的真值。2022-12-16华东师范大学 电子系 马潮 副教授36 2.原码表示法原码表示法 如果正数的符号位用 0 表示,负数的符号位用 1 表示,绝对值的编码规则与前面讨论的无符号数编码规则相同。这种表示方法称为原码表示法。一个数X的原码记作X原。设X=Xn-2 X n-3X0(即n-1 位二进制数),其中Xi为 1 位二进制数,i=0,1,(n-2)。则X原=0 X n-2Xn-3X1X0 当X01 Xn-2Xn-3X1X0 当X0 例 1.2.1 X1=+1010101 则X1原=01
26、010101 X2=-1011101 则X2原=110111012022-12-16华东师范大学 电子系 马潮 副教授37 原码表示的一个有趣情况是数 0 有两种表示形式:+0原=00000000 或-0原=10000000 8 位二进制原码所能表示的数值范围为-127+127。原码表示法简单且易于理解,与真值转换也方便,这是它的优点。缺点是进行加减运算时麻烦。如果参加运算的数可能为正,也可能为负,这时不仅要考虑运算是加还是减,而且还要考虑数的符号和数的绝对值大小。例如两数相加时,要进行判断:如果两数同号,数值部分相加,符号不变;如果两数异号,不仅数值部分实际相减,而且还要比较两数的绝对值大小
27、,才能确定实际的被减数和减数。2022-12-16华东师范大学 电子系 马潮 副教授38 因此采用原码表示后,将使运算器的逻辑复杂化或增加机器运行时间。为此,引入了补码表示法,它可以使正、负数的加法和减法运算简化为单一人相加运算。3.补码表示法补码表示法 (1)补码的概念 根据同余的概念 a+NK=a(mod K)其中K为模,N为任意整数。就是说,在模的意义下,数a与该数本身加上其模的任意整数倍之和相等。2022-12-16华东师范大学 电子系 马潮 副教授39 在数a的无数个a+NK同余数中,我们感兴趣的是N为 1 的同余数,即补数:a补数=a+K(mod K)a 0aK K-|a|-Ka0
28、 (2-9)由式(2-9)确定的两种条件下数a的补数,就是补码的定义和补码编码规则的基础。在计算机运算过程中,数据的位数,即字长总是有限的。这里假设字长为n,两数相加求和时,如果n位的最高位产生了进位,就会丢掉。=2022-12-16华东师范大学 电子系 马潮 副教授40 这正是在模的意义下相加的概念。相加时丢掉的进位即等于模。所以,当n位表示整数时(1 位为符号位,n-1 位为数值位),它的模为 2n,即:100 0 n个 0我们把X的补码记为X补,补码可定义为:X补=X 当 0X2n-1 2n+X 当-2 n-1X02022-12-16华东师范大学 电子系 马潮 副教授41 从定义式(2-
29、10)可见,正数的补码与其原码相同,只有负数才有求补的问题。所以,严格地说,“补码表示法”应称为“负数的补码表示法”。一个二进制数,以 2n为模,它的补码称为 2 补码。(2)一个数的补码的求法 根据定义求补码 X补=2n+X=2n-|X|,X0 例 1.2.2 X=-1010111,n=8,则 X补=28+(-1010111B)=100000000B-1010111B =10101001B(mod 28)2022-12-16华东师范大学 电子系 马潮 副教授42 这种方法要做一次减法,很不方便,一般不用。利用原码求补码 已知X=-Xn-2Xn-3X1X0 =iniiX 220X0则X原=2n
30、-1+Xn-2Xn-3X1X0由定义式(2-10)得:X补=2n+X =2n-1+2n-1 -iniiX 2202n-1=1220iniiX2022-12-16华东师范大学 电子系 马潮 副教授43X补 =2n-1+=2n-1 =2n-11220iniiXiniiX 22012)1(20iniiX1.0132XXXXnn符号位X原数值位按位取反 因此,一个负数X的补码等于其原码除符号位保持不变外,其余各位按位取反,再在最低位加 1。例 1.2.3 X=-1010101B,当n=8 时,则 X原=11010101B2022-12-16华东师范大学 电子系 马潮 副教授44 X补=1 0 1 0
31、1 0 1 0B+1=10101011B 值得注意的是,0 的补码只有唯一的形式,符号位和数值位均为 0。8 位二进制补码所能表示的数值范围为-128+127。表 2.2 给出了 8 位二进制数码对应的无符号二进制数、原码及补码的值。(3)数的补码表示转换为原码表示 一个用补码表示的负数,如将X补再求一次补,即将X补除符号位外取反加 1 就可得到X原,可以表示为2022-12-16华东师范大学 电子系 马潮 副教授452022-12-16华东师范大学 电子系 马潮 副教授46 X补补=X原(证明从略)例 1.2.4 X原=11010101B X补=10101011B 则 X补补=1101010
32、0B+1=11010101B=X原 因此,一个二进制补码表示的数,最高位为符号位,当符号位为“0”(即正数)时,它的原码同补码。当符号位为1”(即负数)时,对其补码再求补,就可得到它的原码。(4)补码的运算规则 补码运算的第一个基本公式是两个n位二进制数之和的补码等于该两数的补码之和(证明从略),即2022-12-16华东师范大学 电子系 马潮 副教授47 X+Y补=X补+Y补(mod 2n)(2-12)该式(2-12)表明,当带符号的两个数采用补码形式表示时,进行加法运算可以把符号位和数值位一起进行运算(或符号位有进位,则丢掉),结果为两数之和的补码形式。下面通过具体例子可以验证该公式的正确
33、性。例 1.2.5 用补码进行下列运算:(+33)+(+15);(-33)+(+15);(+33)+(-15);(-33)+(-15)。00100001B+33补 11011111B -33补+00001111B +15补 +00001111B +15补 00110000B +48补 11101110B-18补2022-12-16华东师范大学 电子系 马潮 副教授4800100001B +33补 11011111B -33补+11110001B -15补 +11110001B -15补 100010010B +18补 111010000B -48补进位,丢掉进位,丢掉 补码运算的第二个基本公式
34、是两个n位二进制数之差的补码等于该两数的补码之差(证明从略),即 X-Y补=X补-Y补(mod 2n)(2-13)该式(2-13)表明,当带符号的两个数采用补码形式表示时,进行减法运算可以把符号位和数值位一起进行运算(若符号位有错位,则丢掉),2022-12-16华东师范大学 电子系 马潮 副教授49 结果为两数之差的补码形式。这是补码表示法的一个优点。下面通过具体例子可以验证该公式的正确性。例 1.2.6 用补码进行下列运算:(+33)-(-15);(-33)-(-15);(+33)-(+15);(-33)-(+15)。00100001B +33补 11011111B -33补 -11110
35、001B -15补 -11110001B -15补 100110000B +48补 111101110B -18补借位,丢掉借位,丢掉2022-12-16华东师范大学 电子系 马潮 副教授5000100001B +33补 11011111B -33补 -00001111B +15补 -00001111B +15补 00010010B +18补 11010000B -48补 补码减法运算时,也可以利用加法基本公式。因为 X-Y=X+(-Y)X-Y补=X+(-Y)补=X补+-Y补即 X-Y补=X补+-Y补(mod 2n)JY (2-14)这是补码运算的第三个基本公式。2022-12-16华东师范大
36、学 电子系 马潮 副教授51 该式表明,求X-Y补可以用X补与-Y补相加来实现。这里的-Y补,即对减数进行求负操作,也就是对补码表示的数(无论是正数还是负数)求得其相应的用补码表示的负数(如果原来是正数,求负后得负数;原来是负数,求负后得正数)。一般称已知Y补求得-Y补的过程叫变补或求负。用补码表示数时,变补或求负是一种很有用的运算。其规则是:如果已知 Y补=Yn-1Yn-2Y1Y0 那么对Y补的每一位(包括符号位)都按位取反,然后再加 1,结果即为-Y补。2022-12-16华东师范大学 电子系 马潮 副教授52 例 1.2.7 若 Y补=01010111B +87补 则-Y补=101010
37、01B -87补 若 Y补=10101001B -87补 则-Y补=01010111B +87补 显然,两个带符号数采用补码表示时,减法运算可以通过“变补相加法”来实现。即X补-Y补=X补+-Y补(mod 2n)(2-15)在设计运算器时,利用这一公式使减法运算用“变补相加法”来实现,使得运算器的结构得到了简化,这是补码表示法的又一个优点。2022-12-16华东师范大学 电子系 马潮 副教授53 例 1.2.8 用补码进行X-Y运算。若:X=33,Y=15 X补=00100001B Y补=00001111B -Y补=11110001B 则 00100001B+33补 +11110001B-1
38、5补 100010010B+18补 若:X=33,Y=-15 X补=00100001B Y补=11110001B -Y补=00001111B2022-12-16华东师范大学 电子系 马潮 副教授54则 00100001B +33补 +00001111B +15补00110000B +48补 若:X=-33,Y=-15 X补=11011111B Y补=11110001B-Y补=00001111B则 11011111B -33补 +00001111B +15补 11101110B -18补2022-12-16华东师范大学 电子系 马潮 副教授55 若:X=-33,Y=15 X补=11011111B
39、 Y补=00001111B -Y补=11110001B 则 11011111B-33补 +11110001B-15补 111010000B-48补 需要指出的是,一旦采用补码进行加减运算,所有参加运算的数和运算的结果都是用补码表示的。计算机里的实际情况就是这样的。要得到真值,还需转换。2022-12-16华东师范大学 电子系 马潮 副教授56 在 1.1 节中,我们已讨论了无符号二进制数的加减运算规则。任意给定一个二进制数,我们可以把它看作有符号数,也可以看作无符号数。其差别是如何看待最高位,看作有符号数时,最高位被看作符号位;看作无符号数时,最高位也看作数值位(即没有符号位)。对于两个无符号
40、二进制数的加减运算,利用前面说明的有符号数补码表示法的加减运算规则得到的结果仍然是正确的。2022-12-16华东师范大学 电子系 马潮 副教授571.2.2 有符号数运算的溢出问题有符号数运算的溢出问题 如果计算机的字长为n位,n位二进制数的最高位为符号位,其余n-1 位为数值位,采用补码表示法时,可表示的数X的范围为 -2n-1X2n-1-1 当n=8 时,可表示的有符号数的范围为-128+127;当n=16 时,可表示的有符号数的范围为-32768+32767。两个有符号数进行加减运算时,如果运算结果超出可表示的有符号和的范围时,就会发生溢出,使计算结果出错。很显然,溢出只能出现在两个同
41、号数相加或两个异号数相减的情况下。2022-12-16华东师范大学 电子系 马潮 副教授58 具体地讲,对于加运算,如果次高位(数值部分最高位)形成进位加入最高位,而最高位(符号位)相加(包括次高位的进位)却没有进位输出时;或者反过来,次高位没有进位加入最高位,但最高位却有进位输出时,都将发生溢出。因为这两种情况分别是:两正数相加,结果超出了范围,形式上变成了负数;两负数相加,结果超出了范围,形式上变成了正数。01001000B +72 +01100010B +98 10101010B -86例 2.2.9 (+72)+(+98)有进位无进位溢出,结果出错2022-12-16华东师范大学 电子
42、系 马潮 副教授59例1.2.10 (-83)+(-80)。10101101B -83 +10110000B -80101011101B +93 无进位 有进位溢出,结果出错 对于减运算,当次高不需从最高位借位,但最高位却需借位(正数减负数,差超出范围);或者反过来,次高位需从最高位借位,但最高位不需借位(负数减正数,差超出范围),也会出现溢出。2022-12-16华东师范大学 电子系 马潮 副教授60 例1.2.11 (+72)-(-98)。01001000B +72 -1001110B -98 10101010B -86 无借位 有借位溢出,结果出错 例1.2.12 (-83)-(+80)
43、。10101101B -83 -01010000B +80 01011101B -93有借位无借位溢出,结果出错2022-12-16华东师范大学 电子系 马潮 副教授611.3 定点数和浮点数定点数和浮点数1.3.1 定点法定点法 所谓定点法,即小数点在数中的位置是固定不变的。以定点法表示的实数称作定点数。通常,定点表示也有两种方法:方法 1:规定小数点固定在最高数值位之前,机器中能表示的所有数都是小数。n位数值部分所能表示的数N的范围(原码表示,下同)为 1-2-nN -(1-2-n)2022-12-16华东师范大学 电子系 马潮 副教授62 它能表示的数的最大绝对值为 1-2-n,最小绝对
44、值为 2-n。方法方法 2:规定小数点固定的最低数值位之后,机器中能表示的所有数都是整数。n 位数值部分所能表示的数N的范围为 2n-1N-2(2n-1)它能表示的数的最大绝对值为 2n-1,最小绝对值为 1。下面给出定点数的两种表示法。符号位数值位数值位小数点符号位数值位数值位小数点2022-12-16华东师范大学 电子系 马潮 副教授63 因为实际数值很少有都是小数或都是整数的,所以定点表示法要求程序员做的一件重要工作是为要计算的问题选择“比例因子”。所有原始数据都要用比例因子化成小数或整数,计算结果又要用比例因子恢复实际值。在计算过程中,中间结果若超过最大绝对值,机器便产生溢出,叫做“上
45、溢”,这时必须重新调整比例因子。中间结果如果小于最小绝对值,计算机只能把它当作 0 处理,叫做“下溢”,这时也必须重新调整比例因子。结于复杂计算,计算中间需多次调整比例因子。2022-12-16华东师范大学 电子系 马潮 副教授641.3.2 浮点法浮点法 任意一个二进制数N总可以写成下面的形式:N=d2p (2-16)其中:d称为尾数,是二进制纯小数,指明数的全部有效数字。前面的符号称作数符,表示数的符号,用尾数前的 1 位表示,0 表示正号,1 表示负号;p称为阶数,它前面的符号称作阶符,用阶码前一位表示,阶符为正时,用 0 表示,阶符为负时,用 1表示。由此可知,将尾部d的小数点向右(对
46、+p)或向左(对-p)移动p位,即得数值N。所以阶符和阶码指明小数点的位置。小数点随着p的符号和大小而浮动。这种数称为浮点数。浮点数的编码格式如下所示:2022-12-16华东师范大学 电子系 马潮 副教授65阶符阶码数符尾数1位 M位 1位 n位 设阶码的位数为m位,尾数的位数为n位,则浮点数的取值范围为 2-n2-(2m-1)|N|(1-2-n)2(2m-1)浮点数能表示的数值范围大,是它的主要可取之处。2022-12-16华东师范大学 电子系 马潮 副教授66 如果尾数的绝对值小于 1 且大于等于 0.5,即采用原码编码的正数或负数和采用补码编码的正数,其尾数的最高位数字为 1;采用补码
47、编码的负数,其尾数的最高位数字为 0,则该浮点二进制数被称为规格化浮点数。浮点运算后 经常要把结果规格化,规格化的操作是尾数每右移 1 位(相当于小数点左移 1 位),阶码加 1;尾数每左移 1 位,阶码减 1。数的加减运算要求小数点对齐。对于浮点表示的数而言,就是阶码(包括阶符)相等。2022-12-16华东师范大学 电子系 马潮 副教授67 使阶码相等的操作称为对阶。一个浮点数阶码的改变,必须伴随着尾数的移位,才不改变数的值,即阶码加 1,尾数必须右移 1 位;若阶码减 1,则要求尾数左移 1 位。两个规格化的浮点数相加或相减之前必须对阶。对阶的规则是:将两个数中阶码小的数的尾数右移、阶码
48、增大,直到与另一个数的阶码相等为止。这样操作是合理的,因为尾数右移,只可能丢失最低有效位,造成误差较小。2022-12-16华东师范大学 电子系 马潮 副教授681.4 二进制编码的十进制数二进制编码的十进制数(BCD编码编码)1.4.1 8421BCD码码 如前所述,计算机中是使用二进制代码工作的。但是由于长期的习惯,在日常生活中,人们最熟悉的数制是十进制。为解决这一矛盾,提出了一人比较适合于十进制系统的二进制代码的特殊形式,即将 1 位十进制的 09 这十个数字分别用 4 位二进制码的组合来代表,在此基础上,可按位对任意十进制数进行编码。这就是二进制编码的十进制数,简称BCD码(Binar
49、y-Codcd Decimal)。2022-12-16华东师范大学 电子系 马潮 副教授69 4 位二进制数码有 16 种组合,原则上可任选其中的 10 种作为代码,分别代表十进制中 0 到 9 这 10 个数字。为便于记忆和比较直观,最常用的方法是 8421BCD码,8、4、2、1 分别是 4 位二进制数的位权值。表 2.3 给出了十进制数和二进制码的对应关系。这种BCD码与十进制数的关系直观,其相互转换也很简单。例 2.4.1十进制数和BCD码相互转换 将十进制数 75.4 转换为BCD码 75.4=(01110101.0100)BCD 将BCD码10000101.0101 转换为十进制数
50、2022-12-16华东师范大学 电子系 马潮 副教授702022-12-16华东师范大学 电子系 马潮 副教授71 (10000101.0101)BCD=85.5 同一个 8 位二进制代码表示的数,当认为它表示的是二进制数和认为它表示的是二进制编码的十进制数时,数值是不相同的。例如 00011000 作为二进制数时,其值为 24;但作为 2 位BCD码时,其值为 18。在计算机中,BCD码有两种基本格式:组合式BCD码格式和分离式BCD码格式。在组合式BCD码格式中,两位十进制数,存放在一个字节中。如数 82 存放格式为:1000 0010 2022-12-16华东师范大学 电子系 马潮 副
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。