第1章-计算机中的数与编码课件_第1页
第1章-计算机中的数与编码课件_第2页
第1章-计算机中的数与编码课件_第3页
第1章-计算机中的数与编码课件_第4页
第1章-计算机中的数与编码课件_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理及应用第一章计算机中的数与编码12/5/20231华东师范大学电子系马潮副教授1.1数制与转换1.2有符号二进制数的表示方法及溢出问题1.3定点数和浮点数

1.4二进制编码的十进制数(BCD编码)

1.5ASCII字符代码1.6汉字编码第一章计算机中的数与编码返回主目录12/5/20232华东师范大学电子系马潮副教授第一章计算机中的数与编码

计算机的最基本功能是进行数据的计算和处理加工。数在计算机中是以器件的物理状态来表示的。为了方便和可靠,在计算机中采用了二进制数字系统,即计算机中要处理的所有数据,都要用二进制数字系统来表示,所有的字母、符号、汉字也都要用二进制编码(不是数)来表示。在本章中,我们将介绍计算机中数制和码制的有关预备知识,其中有些内容已在“计算机应用基础”和“脉冲与数字电路”课程中讲过。由于它是学习微型计算机原理必不可少的基础知识,所以有必要进行复习。12/5/20233华东师范大学电子系马潮副教授1.1数和数制

1.1.1各种数制及其多项式表示法

在人们应用各种数字符号表示事物个数的长期过程中形成了各种数制。数制是以表示数值所用的数字符号的个数来命名的,如十进制、十二进制、十六进制、六十进制等。各种数制中数字符号的个数称为该数制的基数。一个数可以用不同计算制表示它的大小,虽然形式不同,但数的量值则是相等的。在日常生活中,最常用的是十进制。12/5/20234华东师范大学电子系马潮副教授1.十进制数

十进制采用0~9十个数字和一个小数点符号来表示任意十进制数。例如,374.53代表百位为3,十位7,个位为4,十分位为5,百分位为3的十进制数。同一个数字在不同的数位代表的数值是不同的。这种记数方法称为位置记数法。在位置记数法中,对每一个数位赋以不同的位值,称为“权”。对于十进制,每个数位上的权是10的某次幂,个位、十位及百位的权分别为1、10及100。十分位、百分位的权分别为10-1和10-2。每个数位上的数字所表示的量是这个数字和该数位的权的乘积。因此,任意十进制数可按权展开为10的幂多项式。例如,374.53的多项式表示形式为:12/5/20235华东师范大学电子系马潮副教授3×102+7×101+4×100+5×10-1+3×10-2

对于n位整数m位小数的任意十进制数N,可用多项式表示如下:

N10=Kn-1·10n-1+Kn-2·10n-2+…+K1·101+K0·100+K-1·10-1+K-2·10-2+…+K-(m-1)·10-(m-1)+K-m·10-m

其中i表示数的第一位;Ki表示第i位的数字,它可以为0~9中的任一数字;m和n为正整数。式中10为十进制的基数。12/5/20236华东师范大学电子系马潮副教授2.二进制数人们习惯用十进制计数,但在电子计算机中,数是以器件的物理状态来表示的,计算机中采用双稳态电子器件作为保存信息的基本元件,因此计算机中采用二进制数。在二进制中,只有0和1两个数字。二进制数同样采用位置记数法,它的基数为2,每个数位上的权是2的某次幂。对于n位整数m位小数的任意二进制数N2,可以用多项式表示如下:12/5/20237华东师范大学电子系马潮副教授例如:(1101.011)2=1×23+1×22+0×21+1×20+0×2-1+1×2-2+1×2-33.十六进制数计算机中采用二进制数,优点是物理实现容易且运算特别简单,缺点是书写冗长。因此常用十六进制(或有时用八进制)代替二进制来书写数据。在十六进制中,有0,1,…,9,A,B,C,D,E,F等十六个数字符号,其中A、B、C、D、E、F分别与十进制中的10、11、12、13、14、15这6个数相对应。十六进制数同样采用位置记数法,其基数16,每一数位上的权是16的某次幂。12/5/20238华东师范大学电子系马潮副教授对于n位整数m位小数的任意十六进制数N16,可以用多项式表示如下:(Ki=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)例如(10AF.12)16=1×163+0×162+10×161+15×160+1×16-1+2×16-2

实际表示时,一个十六进制数如果最高位数字为字母(A-F),则字母前面必须加一个0,以便与变量名等相区别。12/5/20239华东师范大学电子系马潮副教授表2.1给出了以上四种数制的对应关系。为避免混淆,可在数字的后面加填不同数制的区分符。区分符可以是数字角注,例如53710或537(十进制),11012(二进制),0EA216(十六进制),也可以用字母标注,其中:字母B(Binary)表示为二进制数;字母D(Decimal)或不加字母表示为十进制数;字母H(Hcxadccimal)表示为十六进制数。一般来说,对于基数为X的任一数可以用多项式表示为12/5/202310华东师范大学电子系马潮副教授Ki——第i位的系数,可以为0,1,…,(X-1)共X个数字符号中任一数字符号;m,n——幂指数,均为正整数;Xi——第i位的权。 教科书的第1页给出了计数制的标准定义。12/5/202311华东师范大学电子系马潮副教授12/5/202312华东师范大学电子系马潮副教授1.1.2各种数制的相互转换

1.非十进制数转换成十进制数

非十进制数转换成十进制数比较简单,可先将其按定义展开为多项式,再将系数及权均用十进制表示按十进制进行乘法与加法运算,所得结果即为该数对应的十进制数。例1.1.1将二进制数1101.101转换为十进制数。转换过程如下:1101.101B=1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3=8+4+1+0.5+0.125=13.625∴1101.101B=13.62512/5/202313华东师范大学电子系马潮副教授例1.1.2将十六进制数2AE.4转换为十进制数。2AE.4H=2×162+10×161+14×160+4×16-1

=512+160+14+0.25=686.25∴2AE.4H=686.252.十进制数转换成非十进制整数(1)十进制整数转换成非十进制整数设N为任一十进制整数,若要把它转换成n位X进制整数,则N=12/5/202314华东师范大学电子系马潮副教授显然,等式右边,除了最后一项K0以外,其余各项都包含基数X的因子,都能被X除尽。所以等式两边同除以基数X,余数正是要求的X进制数的最低位K0。商为Kn-1Xn-2+Kn-2Xn-3+…+K2X1+K1

同理,上式中各项除K1外,其余各项都包含基数X的因子,都能被X除尽。所以再将商除以X,余数正是要求的X进制数的次低位K1,商为Kn-1Xn-3+Kn-2Xn-4+…+K3X1+K2

如此一直进行下去,直到商等于0为止,就得到一系列余数,它们正是要求的X进制数的各位。12/5/202315华东师范大学电子系马潮副教授这样我们可以把十进制整数转换为X进制整数的方法总结为用该数或商“除以基数取余数,先为低位后为高位”。例1.1.3将十进制数301转换为二进制数。转换过程如下:

301/2=150 k0=1 9/2=4 k5=1 150/2=75 k1=0 4/2=2 k6=0 75/2=37 k2=1 2/2=1 k7=0 | 37/2=18 k3=1 1/2=0 k8=1 18/2=9 k4=0∴301=100101101B12/5/202316华东师范大学电子系马潮副教授(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+1

若再将上式乘以X便得到K-2+K-3X-1+…+K-mX-m+2

12/5/202317华东师范大学电子系马潮副教授K-2为整数部分,它正好是所要求的X进制小数的次高位。如此继续进行下去,直到小数部分为零时止。若乘积的小数部分始终不为0,说明相对应的X进制小数为不尽小数。这时,乘到能满足计算机精度要求为止。综上所述,我们可以把十进制小数转换为相应X进制小数的方法总线为对该小数或乘以X后新的小数部分“乘以基数取整数,先为高位后为低位”。例1.1.4将0.6875分别转换为二进制及十六进制小数。转换为二进制的过程如下:0.6875×2=1.375K-1=10.375×2=0.75K-2=012/5/202318华东师范大学电子系马潮副教授0.75×2=1.5K-3=10.5×2=1.0K-4=1∴0.6875=0.1011B转换为十六进制的过程如下:0.6875×16=11.0K-1=B∴0.6875=0.BH例1.1.5将0.734转换为二进制小数。转换过程如下:0.734×2=1.468K-1=10.468×2=0.936K-2=012/5/202319华东师范大学电子系马潮副教授0.936×2=1.872K-3=10.872×2=1.744K-4=10.744×2=1.488K-5=10.488×2=0.976K-6=0∴0.734=0.10110…B上面我们分别讨论了十进制整数转换为非十进制整数和十进制小数转换为非十进制小数的方法。如果一个任意十进制数要转换为非十进制数,我们可以把整数部分和小数部分分别加以转换,然后把转换后的整数部分和小数部分相加。12/5/202320华东师范大学电子系马潮副教授例1.1.6将十进制数301.6875分别转换为二进制和十六进制数。利用例1.1.3、例1.1.4的结果,得到:301=100101101B,0.6875=0.1011B301=12DH,0.6875=0.BH∴301.6875=100101101.1011B∴301.6875=12D.BH

3.十六进制数与二进制数之间的转换由于16=24,故1位十六进制数相当于4位二进制数。这样,十六进制数与二进制数之间的相互转换是十分简便的。12/5/202321华东师范大学电子系马潮副教授二进制数转换为十六进制数的方法是:首先从小数点开始分别向左和向右把整数及小数部分每4位分成一组。若整数最高位的一组不足4位,则在其左边加0补足4位;若小数最低位的一组不足4位,则在其右边加0补足4位。然后,用与每组二进制数所对应的十六进制数取代每组的4位二进制数,即得到对应的十六进制数。例1.1.7二进制数1011101001.110101转换为十六进制数的方法是:二进制数001011101001.11010100十六进制数2E9.D412/5/202322华东师范大学电子系马潮副教授十六进制数转换为二进制数的方法是:用相应的4位二进制数取代每1位十六进制数。例1.1.8十六进制数5C7A.3B转换为二进制的方法是:十六进制数5C7A.3B二进制数0101110001111010.00111011∴5C7A.3BH=101110001111010.00111011B12/5/202323华东师范大学电子系马潮副教授1.1.3二进制数的算术运算二进制计数制不仅物理实现容易,而且运算方法也十进制计数制大为简单。注意到二进制数加法是“逢二进一”和减法是“借一作二”的特点,再根据十进制数算术运算的方法,很容易理解和完成二进制数的算术运算。例1.1.910110101B+1111B。加法过程如下:被加数10110101加数00001111进位+111111和1100010012/5/202324华东师范大学电子系马潮副教授∴10110101B+111B=11000100B由此可见,两个二进制数相加时,每1位有3个数(本位被加数和本位加数及低位来的进位)相加,得到本位的和及向高的进位。例1.1.1011000100B-100101B。减法过程如下:被减数11000100减数00100101借位-111111差100111112/5/202325华东师范大学电子系马潮副教授∴11000100B-100101B=1001111B与加法相类似,两个二进制相减时,每1位有3个数(本位被减数,减数以及从低位来的借位)参加运算,本位被减数-本位减数-低位来的借位,即得到本位的差及向高位的借位。例1.1.111101B×1011B。乘法过程如下:被乘数1101乘数×10111101

12/5/202326华东师范大学电子系马潮副教授11010000+1101积10001111∴1101B×1011B=10001111B对笔算来说,上述乘法过程不但是很清楚而且很方便,但对计算机来说,实现起来很不方便。有的微型计算机有专门的乘法指令来完成乘法运算。对于没有乘法指令的微型计算机,乘法是采用部分积右移的办法编制乘法运算程序来实现的。12/5/202327华东师范大学电子系马潮副教授例1.1.12100110B÷110B。除法过程如下:00011010010∴100110B÷110B=110B余10B有的微型计算机有专门的除法指令来完成除法运算。对于没有除法指令的微型计算机,常用“相减-左移”法编制除法运算程序实现除法。12/5/202328华东师范大学电子系马潮副教授1.1.4二进制数的逻辑运算

二进制数的逻辑运算常用的有“与”、“或”、“异或”及“非”运算等四种。在组成表达式时,可分别用符号“AND”、“OR”、“XOR”及“NOT”作为运算符,有时也用“∧”、“∨”、“㊉”作为“与”、“或”、“异或”的运算符,用数学上面加横线“-”表示对该数进行非运算。二进制数的逻辑运算只按位进行运算。

1位二进制数运算规则如下:“与”运算的规则为:12/5/202329华东师范大学电子系马潮副教授1AND0=00AND1=00AND0=01AND1=1“或”运算的规则为:0OR0=00OR0=10OR1=11OR1=112/5/202330华东师范大学电子系马潮副教授“异或”运算的规则为:0XOR0=01XOR0=10XOR1=11XOR1=0“非”运算的规则为:NOT0=1NOT1=0多位二进制数进行逻辑运算时,可以利用二进制数运算规则按接进行运算。12/5/202331华东师范大学电子系马潮副教授例1.1.13二进制数10010111和00111000的“与”、“或”及“异或”。运算结果分别为:10010111与)001110000001000010010111或)001110001011111110010111异或)001110001010111112/5/202332华东师范大学电子系马潮副教授例1.1.14二进制数10010111的“非”。运算结果为:01101000注意:*1个字节、2个字节表示的二进制整数范围*简便的二十进制数转换方法12/5/202333华东师范大学电子系马潮副教授1.2有符号二进制数的表示方法及溢出问题1.2.1有符号二进制数的表示方法前面我们接触的二进制数均为无符号数,即所有二进制数位均为数值位,在很多数据处理过程中需要这样看待某些数。然而实际的数值有时是带有符号的,既可能是正数,也可能是负数。这样就存在一个有符号二进制数的表示方法问题。

1.数的符号表示方法为了表示一个有符号数,除了数值位以外还应指定符号位,通常以这个数的最高位为符号位。我们假设讨论的数为整数。12/5/202334华东师范大学电子系马潮副教授对8位有符号二进制整数,D7为符号位,并规定D7为0表示正数的符号“+”;为1表示负数的符号“-”。因此,8位有符号数的编码格式为:D7D6D5D4D3D2D1D0符号位

数值位这样,数的符号在机器中也数字化了,符号位的数值位一起完整地表示有符号二进制数。我们把一个数在机器中的表示形式称为机器数,而把它们的实际数值称为机器数的真值。12/5/202335华东师范大学电子系马潮副教授

2.原码表示法如果正数的符号位用0表示,负数的符号位用1表示,绝对值的编码规则与前面讨论的无符号数编码规则相同。这种表示方法称为原码表示法。一个数X的原码记作[X]原。设X=Xn-2Xn-3…X0(即n-1位二进制数),其中Xi为1位二进制数,i=0,1,…,(n-2)。则[X]原=0Xn-2Xn-3…X1X0当X≥01Xn-2Xn-3…X1X0当X≤0例1.2.1X1=+1010101则[X1]原=01010101X2=-1011101则[X2]原=1101110112/5/202336华东师范大学电子系马潮副教授原码表示的一个有趣情况是数0有两种表示形式:[+0]原=00000000或[-0]原=100000008位二进制原码所能表示的数值范围为-127—+127。原码表示法简单且易于理解,与真值转换也方便,这是它的优点。缺点是进行加减运算时麻烦。如果参加运算的数可能为正,也可能为负,这时不仅要考虑运算是加还是减,而且还要考虑数的符号和数的绝对值大小。例如两数相加时,要进行判断:如果两数同号,数值部分相加,符号不变;如果两数异号,不仅数值部分实际相减,而且还要比较两数的绝对值大小,才能确定实际的被减数和减数。12/5/202337华东师范大学电子系马潮副教授因此采用原码表示后,将使运算器的逻辑复杂化或增加机器运行时间。为此,引入了补码表示法,它可以使正、负数的加法和减法运算简化为单一人相加运算。

3.补码表示法(1)补码的概念根据同余的概念a+NK=a(modK)其中K为模,N为任意整数。就是说,在模的意义下,数a与该数本身加上其模的任意整数倍之和相等。12/5/202338华东师范大学电子系马潮副教授在数a的无数个a+NK同余数中,我们感兴趣的是N为1的同余数,即补数:[a]补数=a+K(modK)a0≤a<KK-|a|-K<a<0(2-9)由式(2-9)确定的两种条件下数a的补数,就是补码的定义和补码编码规则的基础。在计算机运算过程中,数据的位数,即字长总是有限的。这里假设字长为n,两数相加求和时,如果n位的最高位产生了进位,就会丢掉。=12/5/202339华东师范大学电子系马潮副教授这正是在模的意义下相加的概念。相加时丢掉的进位即等于模。所以,当n位表示整数时(1位为符号位,n-1位为数值位),它的模为2n,即:100……0n个0我们把X的补码记为[X]补,补码可定义为:

[X]补=X当0≤X<2n-1

2n+X当-2n-1≤X<012/5/202340华东师范大学电子系马潮副教授从定义式(2-10)可见,正数的补码与其原码相同,只有负数才有求补的问题。所以,严格地说,“补码表示法”应称为“负数的补码表示法”。一个二进制数,以2n为模,它的补码称为2补码。(2)一个数的补码的求法①根据定义求补码[X]补=2n+X=2n-|X|,X<0例1.2.2X=-1010111,n=8,则[X]补=28+(-1010111B)=100000000B-1010111B=10101001B(mod28)12/5/202341华东师范大学电子系马潮副教授这种方法要做一次减法,很不方便,一般不用。②利用原码求补码已知X=-Xn-2Xn-3…X1X0

=X<0则[X]原=2n-1+Xn-2Xn-3…X1X0由定义式(2-10)得:[X]补=2n+X=2n-1+2n-1-∵2n-1=12/5/202342华东师范大学电子系马潮副教授∴[X]补=2n-1+=2n-1=2n-1符号位[X]原数值位按位取反

因此,一个负数X的补码等于其原码除符号位保持不变外,其余各位按位取反,再在最低位加1。

例1.2.3X=-1010101B,当n=8时,则[X]原=11010101B12/5/202343华东师范大学电子系马潮副教授↓↓↓↓↓↓↓↓[X]补=10101010B+1=10101011B值得注意的是,0的补码只有唯一的形式,符号位和数值位均为0。8位二进制补码所能表示的数值范围为-128~+127。表2.2给出了8位二进制数码对应的无符号二进制数、原码及补码的值。(3)数的补码表示转换为原码表示一个用补码表示的负数,如将[X]补再求一次补,即将[X]补除符号位外取反加1就可得到[X]原,可以表示为12/5/202344华东师范大学电子系马潮副教授12/5/202345华东师范大学电子系马潮副教授[[X]补]补=[X]原(证明从略)例1.2.4[X]原=11010101B[X]补=10101011B则[[X]补]补=11010100B+1=11010101B=[X]原

因此,一个二进制补码表示的数,最高位为符号位,当符号位为“0”(即正数)时,它的原码同补码。当符号位为1”(即负数)时,对其补码再求补,就可得到它的原码。(4)补码的运算规则补码运算的第一个基本公式是两个n位二进制数之和的补码等于该两数的补码之和(证明从略),即12/5/202346华东师范大学电子系马潮副教授[X+Y]补=[X]补+[Y]补(mod2n)(2-12)该式(2-12)表明,当带符号的两个数采用补码形式表示时,进行加法运算可以把符号位和数值位一起进行运算(或符号位有进位,则丢掉),结果为两数之和的补码形式。下面通过具体例子可以验证该公式的正确性。例1.2.5用补码进行下列运算:(+33)+(+15);(-33)+(+15);(+33)+(-15);(-33)+(-15)。00100001B[+33]补11011111B[-33]补

+00001111B[+15]补+00001111B[+15]补00110000B[+48]补11101110B[-18]补12/5/202347华东师范大学电子系马潮副教授00100001B[+33]补11011111B[-33]补

+11110001B[-15]补+11110001B[-15]补[1]00010010B[+18]补[1]11010000B[-48]补进位,丢掉进位,丢掉补码运算的第二个基本公式是两个n位二进制数之差的补码等于该两数的补码之差(证明从略),即[X-Y]补=[X]补-[Y]补(mod2n)(2-13)该式(2-13)表明,当带符号的两个数采用补码形式表示时,进行减法运算可以把符号位和数值位一起进行运算(若符号位有错位,则丢掉),12/5/202348华东师范大学电子系马潮副教授结果为两数之差的补码形式。这是补码表示法的一个优点。下面通过具体例子可以验证该公式的正确性。例1.2.6用补码进行下列运算:(+33)-(-15);(-33)-(-15);(+33)-(+15);(-33)-(+15)。00100001B[+33]补11011111B[-33]补

-11110001B[-15]补-11110001B[-15]补[1]00110000B[+48]补[1]11101110B[-18]补借位,丢掉借位,丢掉12/5/202349华东师范大学电子系马潮副教授00100001B[+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]补(mod2n)[JY](2-14)这是补码运算的第三个基本公式。12/5/202350华东师范大学电子系马潮副教授该式表明,求[X-Y]补可以用[X]补与[-Y]补相加来实现。这里的[-Y]补,即对减数进行求负操作,也就是对补码表示的数(无论是正数还是负数)求得其相应的用补码表示的负数(如果原来是正数,求负后得负数;原来是负数,求负后得正数)。一般称已知[Y]补求得[-Y]补的过程叫变补或求负。用补码表示数时,变补或求负是一种很有用的运算。其规则是:如果已知[Y]补=Yn-1Yn-2…Y1Y0

那么对[Y]补的每一位(包括符号位)都按位取反,然后再加1,结果即为[-Y]补。12/5/202351华东师范大学电子系马潮副教授例1.2.7若[Y]补=01010111B[+87]补

则[-Y]补=10101001B[-87]补

若[Y]补=10101001B[-87]补

则[-Y]补=01010111B[+87]补

显然,两个带符号数采用补码表示时,减法运算可以通过“变补相加法”来实现。即[X]补-[Y]补=[X]补+[-Y]补(mod2n)(2-15)在设计运算器时,利用这一公式使减法运算用“变补相加法”来实现,使得运算器的结构得到了简化,这是补码表示法的又一个优点。12/5/202352华东师范大学电子系马潮副教授例1.2.8用补码进行X-Y运算。若:X=33,Y=15[X]补=00100001B[Y]补=00001111B[-Y]补=11110001B则00100001B[+33]补

+11110001B[-15]补[1]00010010B[+18]补若:X=33,Y=-15[X]补=00100001B[Y]补=11110001B[-Y]补=00001111B12/5/202353华东师范大学电子系马潮副教授则00100001B[+33]补

+00001111B[+15]补00110000B[+48]补若:X=-33,Y=-15[X]补=11011111B[Y]补=11110001B[-Y]补=00001111B则11011111B[-33]补

+00001111B[+15]补

11101110B[-18]补12/5/202354华东师范大学电子系马潮副教授若:X=-33,Y=15[X]补=11011111B[Y]补=00001111B[-Y]补=11110001B则11011111B[-33]补

+11110001B[-15]补

[1]11010000B[-48]补需要指出的是,一旦采用补码进行加减运算,所有参加运算的数和运算的结果都是用补码表示的。计算机里的实际情况就是这样的。要得到真值,还需转换。12/5/202355华东师范大学电子系马潮副教授在1.1节中,我们已讨论了无符号二进制数的加减运算规则。任意给定一个二进制数,我们可以把它看作有符号数,也可以看作无符号数。其差别是如何看待最高位,看作有符号数时,最高位被看作符号位;看作无符号数时,最高位也看作数值位(即没有符号位)。对于两个无符号二进制数的加减运算,利用前面说明的有符号数补码表示法的加减运算规则得到的结果仍然是正确的。12/5/202356华东师范大学电子系马潮副教授1.2.2有符号数运算的溢出问题如果计算机的字长为n位,n位二进制数的最高位为符号位,其余n-1位为数值位,采用补码表示法时,可表示的数X的范围为-2n-1≤X≤2n-1-1当n=8时,可表示的有符号数的范围为-128~+127;当n=16时,可表示的有符号数的范围为-32768~+32767。两个有符号数进行加减运算时,如果运算结果超出可表示的有符号和的范围时,就会发生溢出,使计算结果出错。很显然,溢出只能出现在两个同号数相加或两个异号数相减的情况下。12/5/202357华东师范大学电子系马潮副教授具体地讲,对于加运算,如果次高位(数值部分最高位)形成进位加入最高位,而最高位(符号位)相加(包括次高位的进位)却没有进位输出时;或者反过来,次高位没有进位加入最高位,但最高位却有进位输出时,都将发生溢出。因为这两种情况分别是:两正数相加,结果超出了范围,形式上变成了负数;两负数相加,结果超出了范围,形式上变成了正数。01001000B+72+01100010B+9810101010B-86例2.2.9(+72)+(+98)有进位无进位溢出,结果出错12/5/202358华东师范大学电子系马潮副教授例1.2.10(-83)+(-80)。10101101B-83+10110000B-80[1]01011101B+93无进位有进位溢出,结果出错对于减运算,当次高不需从最高位借位,但最高位却需借位(正数减负数,差超出范围);或者反过来,次高位需从最高位借位,但最高位不需借位(负数减正数,差超出范围),也会出现溢出。12/5/202359华东师范大学电子系马潮副教授例1.2.11(+72)-(-98)。01001000B+72-1001110B-9810101010B-86无借位有借位溢出,结果出错例1.2.12(-83)-(+80)。10101101B-83-01010000B+8001011101B-93有借位无借位溢出,结果出错12/5/202360华东师范大学电子系马潮副教授1.3定点数和浮点数1.3.1定点法所谓定点法,即小数点在数中的位置是固定不变的。以定点法表示的实数称作定点数。通常,定点表示也有两种方法:方法1:规定小数点固定在最高数值位之前,机器中能表示的所有数都是小数。n位数值部分所能表示的数N的范围(原码表示,下同)为1-2-n≥N≥-(1-2-n)12/5/202361华东师范大学电子系马潮副教授它能表示的数的最大绝对值为1-2-n,最小绝对值为2-n。

方法2:规定小数点固定的最低数值位之后,机器中能表示的所有数都是整数。n位数值部分所能表示的数N的范围为2n-1≥N≥-2(2n-1)它能表示的数的最大绝对值为2n-1,最小绝对值为1。下面给出定点数的两种表示法。符号位·数值位·小数点符号位·数值位小数点·12/5/202362华东师范大学电子系马潮副教授因为实际数值很少有都是小数或都是整数的,所以定点表示法要求程序员做的一件重要工作是为要计算的问题选择“比例因子”。所有原始数据都要用比例因子化成小数或整数,计算结果又要用比例因子恢复实际值。在计算过程中,中间结果若超过最大绝对值,机器便产生溢出,叫做“上溢”,这时必须重新调整比例因子。中间结果如果小于最小绝对值,计算机只能把它当作0处理,叫做“下溢”,这时也必须重新调整比例因子。结于复杂计算,计算中间需多次调整比例因子。12/5/202363华东师范大学电子系马潮副教授1.3.2浮点法

任意一个二进制数N总可以写成下面的形式:N=±d·2±p(2-16)其中:d称为尾数,是二进制纯小数,指明数的全部有效数字。前面的符号称作数符,表示数的符号,用尾数前的1位表示,0表示正号,1表示负号;p称为阶数,它前面的符号称作阶符,用阶码前一位表示,阶符为正时,用0表示,阶符为负时,用1表示。由此可知,将尾部d的小数点向右(对+p)或向左(对-p)移动p位,即得数值N。所以阶符和阶码指明小数点的位置。小数点随着p的符号和大小而浮动。这种数称为浮点数。浮点数的编码格式如下所示:12/5/202364华东师范大学电子系马潮副教授阶符阶码数符尾数1位M位1位n位设阶码的位数为m位,尾数的位数为n位,则浮点数的取值范围为2-n·2-(2m-1)≤|N|≤(1-2-n)·2(2m-1)浮点数能表示的数值范围大,是它的主要可取之处。12/5/202365华东师范大学电子系马潮副教授如果尾数的绝对值小于1且大于等于0.5,即采用原码编码的正数或负数和采用补码编码的正数,其尾数的最高位数字为1;采用补码编码的负数,其尾数的最高位数字为0,则该浮点二进制数被称为规格化浮点数。浮点运算后经常要把结果规格化,规格化的操作是尾数每右移1位(相当于小数点左移1位),阶码加1;尾数每左移1位,阶码减1。数的加减运算要求小数点对齐。对于浮点表示的数而言,就是阶码(包括阶符)相等。12/5/202366华东师范大学电子系马潮副教授使阶码相等的操作称为对阶。一个浮点数阶码的改变,必须伴随着尾数的移位,才不改变数的值,即阶码加1,尾数必须右移1位;若阶码减1,则要求尾数左移1位。两个规格化的浮点数相加或相减之前必须对阶。对阶的规则是:将两个数中阶码小的数的尾数右移、阶码增大,直到与另一个数的阶码相等为止。这样操作是合理的,因为尾数右移,只可能丢失最低有效位,造成误差较小。12/5/202367华东师范大学电子系马潮副教授1.4二进制编码的十进制数(BCD编码)

1.4.18421BCD码

如前所述,计算机中是使用二进制代码工作的。但是由于长期的习惯,在日常生活中,人们最熟悉的数制是十进制。为解决这一矛盾,提出了一人比较适合于十进制系统的二进制代码的特殊形式,即将1位十进制的0~9这十个数字分别用4位二进制码的组合来代表,在此基础上,可按位对任意十进制数进行编码。这就是二进制编码的十进制数,简称BCD码(Binary-CodcdDecimal)。12/5/202368华东师范大学电子系马潮副教授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转换为十进制数12/5/202369华东师范大学电子系马潮副教授12/5/202370华东师范大学电子系马潮副教授(10000101.0101)BCD=85.5同一个8位二进制代码表示的数,当认为它表示的是二进制数和认为它表示的是二进制编码的十进制数时,数值是不相同的。例如00011000作为二进制数时,其值为24;但作为2位BCD码时,其值为18。在计算机中,BCD码有两种基本格式:组合式BCD码格式和分离式BCD码格式。在组合式BCD码格式中,两位十进制数,存放在一个字节中。如数82存放格式为:10000010

12/5/202371华东师范大学电子系马潮副教授在分离BCD码格式中,每位数存放在8位字节的低4位部分,高4位部分的内容与数值无关,如数82存放格式为:uuuu1000uuuu0010其中u表示任意。12/5/202372华东师范大学电子系马潮副教授1.4.2BCD码的加减运算

下面我们以组合式BCD码格式为例讨论BCD码的加法与减法运算。由于BCD编码是将每个十进制数用一组4位二进制数来表示,因此,若将这种BCD码直接交计算机去运算,由于计算机总是把数当作二进制数来运算,所以结果可能出错。例2.4.2用BCD码求38+49。0011100038的BCD码+0100100149的BCD码1000000181的BCD码12/5/202373华东师范大学电子系马潮副教授对应十进制数为81,正确结果应为87,显然结果是错误的。其原因是,十进制数相加应当是“逢十进一”,而计算机按二进制数运算,每4位为一组,低4位向高4位进位与十六进制数低位向高位的情况相当,是“逢十六进一”,所以当相加结果超过9时将比正确结果少6。因此,结果出错。解决的办法是对二进制加法运算的结果采用“加6修正”,将二进制加法运算的结果修正为BCD码加法运算的结果。两个两位BCD数相加时,对二进制加法运算结果修正的规则如下:(1)如果任何两个对应位BCD数相加的结果向高一位无进位时,若得到的结果小于或等于9,则该位不需修正;若得到的结果大小9且小于16位,则该位进行加6修正。12/5/202374华东师范大学电子系马潮副教授(2)如果任何两个对应位BCD数相加的结果向高一位有进位时(即结果大于或等于16),该位进行加6修正。(3)低位修正结果使高位大于9时,高位进行加6修正。这种修正称为BCD调整。下面通过例题验证上述规则的正确性。2.4.3用BCD码求35+21。0011010135+0010000121010101105612/5/202375华东师范大学电子系马潮副教授低4位,高4位均不满足修正法则,所以结果正确,不需修正。例2.4.4用BCD码求25+37。0010010125+001101113701011100低4位满足法则1+00000110加6修正0110001062结果正确112/5/202376华东师范大学电子系马潮副教授例2.4.5用BCD码求38+49。0011100038+010010014910000001低4位满足法则2+00000110加6修正1000011187结果正确1例2.4.6用BCD码求42+95。0100001042+1001010195

12/5/202377华东师范大学电子系马潮副教授11010111高4位满足法则1+01100000加6修正[1]00110111137结果正确1例2.4.7用BCD码求91+83。1001000191+1000001183[1]00010100高4位满足法则2+01100000加6修正[1]01110100174结果正确112/5/202378华东师范大学电子系马潮副教授例2.4.8用BCD码求94+7。1001010094+00000111710011011低4位满足法则1+00000110加6修正10100001高4位满足法则3+01100000加6修正[1]00000001101结果正确12/5/202379华东师范大学电子系马潮副教授例2.4.9用BCD码求76+45。0111011076+010001014510111011低4位、高4位均满足法则1+01100110同时加6修正[1]00100001121结果正确112/5/202380华东师范大学电子系马潮副教授两个BCD码进行减法运算时,当低位向高位有借位时,由于“借一作十六”与“借一作十”的差别,将比正确结果多6,所以有借位时,可采用“减6修正法”来修正。实际上,计算机中有BCD调整指令,两个BCD码进行加减时,先按二进制加减指令进行运算,再对结果用BCD调整指令进行调整,就可得到正确的十进制运算结果。另外,BCD码的加减运算,也可以在运算前由程序先变换成二进制,然后由计算机对二进制数运算处理,运算以后再将二进制数结果由程序转换为BCD码。12/5/202381华

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论