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

下载本文档

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

文档简介

1、2022-7-611.1 数制与转换1.2 有符号二进制数的表示方法及溢出问题1.3 定点数和浮点数1.4 二进制编码的十进制数(BCD编码)1.5 ASCII字符代码1.6 汉字编码第一章 计算机中的数与编码返回主目录第1页/共93页2022-7-62第一章 计算机中的数与编码 计算机的最基本功能是进行数据的计算和处理加工。 数在计算机中是以器件的物理状态来表示的。为了方便和可靠, 在计算机中采用了二进制数字系统,即计算机中要处理的所有数据,都要用二进制数字系统来表示,所有的字母、符号、汉字也都要用二进制编码(不是普通意义所理解的“数”)来表示。在本章中,我们将介绍计算机中数制和码制的有关预

2、备知识,其中有些内容已在“计算机应用基础”和“脉冲与数字电路”课程中讲过。 由于它是学习微型计算机原理必不可少的基础知识,所以有必要进行复习。第2页/共93页2022-7-631.1 数和数制1.1.1 各种数制及其多项式表示法 在人们应用各种数字符号表示事物个数的长期过程中形成了各种数制。数制是以表示数值所用的数字符号的个数来命名的,如十进制、十二进制、十六进制、六十进制等。 各种数制中数字符号的个数称为该数制的基数。一个数可以用不同计算制表示它的大小,虽然形式不同,但数的量值则是相等的。在日常生活中,最常用的是十进制。第3页/共93页2022-7-64 1. 十进制数 十进制采用 09 十

3、个数字和一个小数点符号来表示任意十进制数。例如,374.53 代表百位为 3,十位 7,个位为 4, 十分位为 5, 百分位为 3 的十进制数。同一个数字在不同的数位代表的数值是不同的。这种记数方法称为位置记数法。 在位置记数法中,对每一个数位赋以不同的位值,称为“权”。 对于十进制,每个数位上的权是 10 的某次幂,个位、十位及百位的权分别为 1、10 及 100。十分位、百分位的权分别为 10-1和 10-2。每个数位上的数字所表示的量是这个数字和该数位的权的乘积。因此,任意十进制数可按权展开为 10 的幂多项式。例如,374.53 的多项式表示形式为:第4页/共93页2022-7-65

4、3102+7101+4 100 +510-1+310-2 因此,对于n位整数m位小数的任意十进制数N, 可用多项式表示如下: N10= Kn-110n-1+Kn-210n-2+K1101+K0100+K-110-1+K-210-2+K-(m-1)10-(m-1)+K-m 10-m inmiik 101 其中i表示数的某一位; Ki表示第i位的数字,它可以为 09 中的任一数字;m和n为正整数。式中 10 为十进制的基数。 第5页/共93页2022-7-66 2. 二进制数 人们习惯用十进制计数,但在电子计算机中, 数是以器件的物理状态来表示的,计算机中通常采用稳态电子器件作为保存信息的基本元件

5、,因此计算机中采用二进制数最方便。 在二进制中,只有 0 和 1 两个数字。二进制数同样采用位置记数法, 它的基数为 2,每个数位上的权是 2 的某次幂。 对于n位整数m位小数的任意二进制数N2, 可以用多项式表示如下:)或10(212iinmiikkN第6页/共93页2022-7-67 例如:(1101.011)2=123+122+021+120+02-1+12-2+12-3 3. 十六进制数 计算机中采用二进制数, 优点是物理实现容易且运算特别简单,缺点是书写冗长。因此常用十六进制(或有时用八进制)代替二进制来表示和书写数据。在十六进制中,使用 0,1,9,A,B,C,D,E,F等十六个数

6、字符号, 其中A、B、C、D、E、F分别与十进制中的 10、11、12、13、14、15 这 6 个数相对应。 十六进制数同样采用位置记数法,其基数 16,每一数位上的权是 16 的某次幂。第7页/共93页2022-7-68 对于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,以便与变量名等相区别。第8

7、页/共93页2022-7-69 表 2.1 给出了以上四种数制的对应关系。为避免混淆, 可在数字的后面加填不同数制的区分符。 区分符可以是数字角注, 例如 53710或 537(十进制),11012(二进制),0EA216(十六进制),也可以用字母标注,其中:字母B(Binary)表示为二进制数;字母D(Decimal)或不加字母表示为十进制数;字母H(Hcxadccimal)表示为十六进制数。 一般来说, 对于基数为X的任一数可以用多项式表示为inmiiXXKN.1第9页/共93页2022-7-610 Ki第i位的系数,可以为 0,1,,(X-1)共X个数字符号中任一数字符号; m,n幂指数

8、,均为正整数; Xi第i位的权。教科书的第1页给出了计数制的标准定义。 第10页/共93页2022-7-611第11页/共93页2022-7-6121.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.6

9、25第12页/共93页2022-7-613 例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 = 011221110KXkXkXkXknnnninii第13页/共93页2022-7-614 显然, 等式右边,除了最后一项K0以外,其余各项都包含基数X的因子,都能被X除尽。 所以等式两边同除以基数X, 余数正是要求的X进

10、制数的最低位K0。商为 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进制数的各位。第14页/共93页2022-7-615 这样我们可以把十进制整数转换为X进制整数的方法总结为用该数或商“除以基数取余数,先为低位后为高位”。 例1.1.3 将十进制数 301 转换为二进制数。 转换过程如下:301/2=15

11、0k0=19/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 = 100101101B第15页/共93页2022-7-616 (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进制小数的最高位;而新的小数部分为

12、K-2X-1+K-3X-2+K-mX-m+1若再将上式乘以X便得到 K-2+K-3X-1+K-mX-m+2imiiXk1第16页/共93页2022-7-617 K-2为整数部分,它正好是所要求的X进制小数的次高位。 如此继续进行下去,直到小数部分为零时止。若乘积的小数部分始终不为 0,说明相对应的X进制小数为不尽小数。这时, 乘到能满足计算机精度要求为止。 综上所述,我们可以把十进制小数转换为相应X进制小数的方法总线为对该小数或乘以X后新的小数部分“乘以基数取整数,先为高位后为低位”。 例1.1.4 将 0.6875 分别转换为二进制及十六进制小数。 转换为二进制的过程如下: 0.68752=

13、1.375 K-1=1 0.3752=0.75 K-2=0第17页/共93页2022-7-618 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=0第18页/共93页2022-7-619 0.9362=1.872 K-3=1 0.8722=1.744 K-4=1 0.7442=1.488 K-5=1 0.4882=0.976

14、 K-6=0 0.734=0.10110B 上面我们分别讨论了十进制整数转换为非十进制整数和十进制小数转换为非十进制小数的方法。如果一个任意十进制数要转换为非十进制数, 我们可以把整数部分和小数部分分别加以转换,然后把转换后的整数部分和小数部分相加。第19页/共93页2022-7-620 例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=12D.BH

15、3. 十六进制数与二进制数之间的转换 由于 16=24, 故 1 位十六进制数相当于4 位二进制数。 这样,十六进制数与二进制数之间的相互转换是十分简便的。第20页/共93页2022-7-621 二进制数转换为十六进制数的方法是: 首先从小数点开始分别向左和向右把整数及小数部分每 4 位分成一组。 若整数最高位的一组不足 4 位,则在其左边加 0 补足 4 位;若小数最低位的一组不足 4 位,则在其右边加 0 补足 4 位。然后, 用与每组二进制数所对应的十六进制数取代每组的 4 位二进制数,即得到对应的十六进制数。 例1.1.7 二进制数 1011101001.110101 转换为十六进制数

16、的方法是: 二进制数 0010 1110 1001. 1101 0100十六进制数 2 E 9 . D 4第21页/共93页2022-7-622 十六进制数转换为二进制数的方法是: 用相应的 4 位二进制数取代每 1 位十六进制数。 例1.1.8 十六进制数 5C7A.3B 转换为二进制的方法是: 十六进制数 5 C 7 A . 3 B二进制数 0101 1100 0111 1010 . 0011 1011 5C7A.3BH=101110001111010.00111011B第22页/共93页2022-7-6231.1.3 二进制数的算术运算 二进制计数制不仅物理实现容易,而且运算方法也十进制

17、计数制大为简单。注意到二进制数加法是“逢二进一”和减法是“借一作二”的特点,再根据十进制数算术运算的方法,很容易理解和完成二进制数的算术运算。例1.1.9 10110101B+1111B。加法过程如下: 被加数 10110101 加数 00001111 进位 + 111111 和 11000100第23页/共93页2022-7-624 10110101B+111B=11000100B 由此可见,两个二进制数相加时,每 1 位有 3 个数(本位被加数和本位加数及低位来的进位)相加,得到本位的和及向高的进位。例1.1.10 11000100B-100101B。 减法过程如下: 被减数 110001

18、00 减数 00100101 借位 - 111111 差 1001111第24页/共93页2022-7-625 11000100B-100101B=1001111B 与加法相类似, 两个二进制相减时,每 1 位有 3 个数(本位被减数,减数以及从低位来的借位)参加运算, 本位被减数-本位减数-低位来的借位,即得到本位的差及向高位的借位。例1.1.11 1101B1011B。 乘法过程如下: 被乘数 1101 乘数 1011 1101 第25页/共93页2022-7-626 1101 0000+ 1101积 10001111 1101B1011B=10001111B 对笔算来说,上述乘法过程不但

19、是很清楚而且很方便, 但对计算机来说,实现起来很不方便。有的微型计算机有专门的乘法指令来完成乘法运算。对于没有乘法指令的微型计算机,乘法是采用部分积右移的办法编制乘法运算程序来实现的。第26页/共93页2022-7-627例1.1.12 100110B110B。除法过程如下: 0 0 0 1 1 0110100110 1 0 01 0 100110B110B=110B余10B 有的微型计算机有专门的除法指令来完成除法运算。 对于没有除法指令的微型计算机,常用“相减-左移”法编制除法运算程序实现除法。第27页/共93页2022-7-6281.1.4二进制数的逻辑运算 二进制数的逻辑运算常用的有“

20、与”、 “或”、 “异或”及“非”运算等四种。在组成表达式时,可分别用符号“AND”、 “OR”、 “XOR”及“NOT”作为运算符,有时也用“”、 “”、 “”作为“与”、 “或”、 “异或”的运算符, 用数学上面加横线“-”表示对该数进行非运算。二进制数的逻辑运算只按位进行运算。 1 位二进制数运算规则如下: “与”运算的规则为:第28页/共93页2022-7-6291 AND 0=00 AND 1=00 AND 0=01 AND 1=1“或”运算的规则为:0 OR 0=00 OR 0=10 OR 1=11 OR 1=1第29页/共93页2022-7-630“异或”运算的规则为:0 XOR

21、 0=01 XOR 0=10 XOR 1=11 XOR 1=0“非”运算的规则为:NOT 0=1NOT 1=0 多位二进制数进行逻辑运算时, 可以利用二进制数运算规则按接进行运算。第30页/共93页2022-7-631 例1.1.13 二进制数 10010111 和 00111000 的“与”、“或”及“异或”。 运算结果分别为: 10010111 与)001110000001000010010111或)001110001011111110010111异或)00111000 10101111第31页/共93页2022-7-632 例1.1.14 二进制数 10010111 的“非”。 运算结果

22、为: 01101000注意: * 1个字节、2个字节表示的二进制整数范围 * 简便的二十进制数转换方法第32页/共93页2022-7-6331.2 有符号二进制数的表示方法及溢出问题1.2.1 有符号二进制数的表示方法 前面我们接触的二进制数均为无符号数, 即所有二进制数位均为数值位,在很多数据处理过程中需要这样看待某些数。然而实际的数值有时是带有符号的,既可能是正数, 也可能是负数。这样就存在一个有符号二进制数的表示方法问题。 1. 数的符号表示方法 为了表示一个有符号数,除了数值位以外还应指定符号位,通常以这个数的最高位为符号位。我们假设讨论的数为整数。 第33页/共93页2022-7-6

23、34 对 8 位有符号二进制整数,D7 为符号位,并规定D7 为 0 表示正数的符号“+”; 为 1 表示负数的符号“-”。因此,8位有符号数的编码格式为:D7D6D5D4D3D2D1D0符号位 数值位 这样,数的符号在机器中也数字化了,符号位的数值位一起完整地表示有符号二进制数。我们把一个数在机器中的表示形式称为机器数, 而把它们的实际数值称为机器数的真值。第34页/共93页2022-7-635 2. 原码表示法 如果正数的符号位用 0 表示,负数的符号位用 1 表示, 绝对值的编码规则与前面讨论的无符号数编码规则相同。 这种表示方法称为原码表示法。 一个数X的原码记作X原。 设X=Xn-2

24、 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原=01010101 X2=-1011101 则X2原=11011101第35页/共93页2022-7-636 原码表示的一个有趣情况是数 0 有两种表示形式: +0原=00000000 或 -0原=10000000 8 位二进制原码所能表示的数值范围为-127+127。 原码表示法简单且易于理解,与真值转换也方便,这是它的优点。缺点是进行加减运算时麻烦。如果参加运算的

25、数可能为正,也可能为负,这时不仅要考虑运算是加还是减,而且还要考虑数的符号和数的绝对值大小。例如两数相加时,要进行判断: 如果两数同号, 数值部分相加,符号不变;如果两数异号,不仅数值部分实际相减, 而且还要比较两数的绝对值大小,才能确定实际的被减数和减数。第36页/共93页2022-7-637 因此采用原码表示后,将使运算器的逻辑复杂化或增加机器运行时间。为此,引入了补码表示法,它可以使正、负数的加法和减法运算简化为单一人相加运算。 3. 补码表示法 (1) 补码的概念 根据同余的概念 a+NK=a(mod K) 其中K为模,N为任意整数。就是说,在模的意义下,数a与该数本身加上其模的任意整

26、数倍之和相等。第37页/共93页2022-7-638 在数a的无数个a+NK同余数中, 我们感兴趣的是N为 1 的同余数,即补数:a补数 =a+K(mod K) a 0aK K-|a| -Ka0 (2 - 9) 由式(2 - 9)确定的两种条件下数a的补数,就是补码的定义和补码编码规则的基础。 在计算机运算过程中,数据的位数,即字长总是有限的。 这里假设字长为n, 两数相加求和时,如果n位的最高位产生了进位,就会丢掉。=第38页/共93页2022-7-639 这正是在模的意义下相加的概念。相加时丢掉的进位即等于模。所以,当n位表示整数时(1 位为符号位, n-1 位为数值位), 它的模为 2n

27、, 即:100 0 n个 0我们把X的补码记为X补,补码可定义为: X补 = X 当 0X2n-1 2n+X 当-2 n-1X0第39页/共93页2022-7-640 从定义式(2 - 10)可见,正数的补码与其原码相同, 只有负数才有求补的问题。所以,严格地说, “补码表示法”应称为“负数的补码表示法”。一个二进制数,以 2n为模,它的补码称为 2 补码。 (2) 一个数的补码的求法 根据定义求补码 X补= 2n+X=2n-|X|, X0 例 1.2.2 X = -1010111, n=8,则 X补 = 28+(-1010111B) =100000000B-1010111B =1010100

28、1B(mod 28)第40页/共93页2022-7-641 这种方法要做一次减法,很不方便,一般不用。 利用原码求补码 已知X = -Xn-2Xn-3X1X0 =iniiX 220X0则X原= 2n-1+Xn-2Xn-3X1X0由定义式(2 - 10)得: X补 = 2n+X = 2n-1+2n-1 -iniiX 2202n-1=1220iniiX第41页/共93页2022-7-642X补 =2n-1 + = 2n-1 =2n-11220iniiXiniiX 22012)1 (20iniiX1.0132XXXXnn符号位X原数值位按位取反 因此, 一个负数X的补码等于其原码除符号位保持不变外,

29、其余各位按位取反,再在最低位加 1。 例 1.2.3 X = -1010101B, 当n=8 时,则 X原 = 11010101B第42页/共93页2022-7-643 X补 = 1 0 1 0 1 0 1 0B+1=10101011B 值得注意的是,0 的补码只有唯一的形式, 符号位和数值位均为 0。8 位二进制补码所能表示的数值范围为-128+127。 表 2.2 给出了 8 位二进制数码对应的无符号二进制数、原码及补码的值。 (3) 数的补码表示转换为原码表示 一个用补码表示的负数, 如将X补再求一次补, 即将X补除符号位外取反加 1 就可得到X原,可以表示为第43页/共93页2022-

30、7-644第44页/共93页2022-7-645 X补补= X原(证明从略) 例 1.2.4 X原=11010101B X补=10101011B 则 X补补=11010100B+1=11010101B= X原 因此,一个二进制补码表示的数,最高位为符号位,当符号位为“0”(即正数)时,它的原码同补码。当符号位为1”(即负数)时,对其补码再求补,就可得到它的原码。 (4) 补码的运算规则 补码运算的第一个基本公式是两个n位二进制数之和的补码等于该两数的补码之和(证明从略), 即第45页/共93页2022-7-646 X+Y补= X补+ Y补(mod 2n) (2-12) 该式(2 - 12)表明

31、, 当带符号的两个数采用补码形式表示时,进行加法运算可以把符号位和数值位一起进行运算(或符号位有进位,则丢掉),结果为两数之和的补码形式。下面通过具体例子可以验证该公式的正确性。 例 1.2.5 用补码进行下列运算: (+33)+(+15); (-33)+(+15); (+33)+(-15); (-33)+(-15)。00100001B +33补 11011111B -33补+ 00001111B +15补 + 00001111B +15补 00110000B +48补 11101110B -18补第46页/共93页2022-7-64700100001B +33补 11011111B -33补

32、+ 11110001B -15补 +11110001B -15补 100010010B +18补 111010000B -48补进位,丢掉进位,丢掉 补码运算的第二个基本公式是两个n位二进制数之差的补码等于该两数的补码之差(证明从略),即 X-Y补=X补- Y补(mod 2n) (2 - 13)该式(2 - 13)表明, 当带符号的两个数采用补码形式表示时, 进行减法运算可以把符号位和数值位一起进行运算(若符号位有错位,则丢掉),第47页/共93页2022-7-648 结果为两数之差的补码形式。 这是补码表示法的一个优点。 下面通过具体例子可以验证该公式的正确性。 例 1.2.6 用补码进行下

33、列运算:(+33)-(-15); (-33)-(-15); (+33)-(+15); (-33)-(+15)。00100001B +33补 11011111B -33补 -11110001B -15补 - 11110001B -15补 100110000B +48补 111101110B -18补借位,丢掉借位,丢掉第48页/共93页2022-7-64900100001B +33补 11011111B -33补 -00001111B +15补 -00001111B +15补 00010010B +18补 11010000B -48补 补码减法运算时, 也可以利用加法基本公式。 因为 X-Y=X

34、+(-Y) X-Y补= X+(-Y)补= X补+ -Y补即 X-Y补= X补+ -Y补(mod 2n)JY (2 -14) 这是补码运算的第三个基本公式。第49页/共93页2022-7-650 该式表明,求X-Y补可以用X补与-Y补相加来实现。 这里的-Y补,即对减数进行求负操作,也就是对补码表示的数(无论是正数还是负数)求得其相应的用补码表示的负数(如果原来是正数,求负后得负数;原来是负数, 求负后得正数)。 一般称已知Y补求得-Y补的过程叫变补或求负。 用补码表示数时, 变补或求负是一种很有用的运算。 其规则是:如果已知 Y补= Yn-1Yn-2Y1Y0 那么对Y补的每一位(包括符号位)都

35、按位取反, 然后再加 1,结果即为-Y补。第50页/共93页2022-7-651 例 1.2.7 若 Y补=01010111B +87补 则 -Y补= 10101001B -87补 若 Y补=10101001B -87补 则 -Y补= 01010111B +87补 显然, 两个带符号数采用补码表示时, 减法运算可以通过“变补相加法”来实现。即X补- Y补= X补+ -Y补(mod 2n) (2 - 15) 在设计运算器时, 利用这一公式使减法运算用“变补相加法”来实现,使得运算器的结构得到了简化,这是补码表示法的又一个优点。第51页/共93页2022-7-652 例 1.2.8 用补码进行X-

36、Y运算。 若: X=33, Y=15 X补= 00100001B Y补= 00001111B -Y补= 11110001B 则 00100001B+33补 + 11110001B-15补 100010010B+18补 若: X=33, Y=-15 X补= 00100001B Y补= 11110001B -Y补= 00001111B第52页/共93页2022-7-653则 00100001B +33补 + 00001111B +15补00110000B +48补 若: X=-33, Y=-15 X补= 11011111B Y补= 11110001B -Y补= 00001111B则 1101111

37、1B -33补 +00001111B +15补 11101110B -18补第53页/共93页2022-7-654 若: X=-33, Y=15 X补= 11011111B Y补= 00001111B -Y补= 11110001B 则 11011111B -33补 +11110001B -15补 111010000B -48补 需要指出的是,一旦采用补码进行加减运算, 所有参加运算的数和运算的结果都是用补码表示的。计算机里的实际情况就是这样的。要得到真值,还需转换。第54页/共93页2022-7-655 在 1.1 节中, 我们已讨论了无符号二进制数的加减运算规则。任意给定一个二进制数,我们可

38、以把它看作有符号数, 也可以看作无符号数。其差别是如何看待最高位,看作有符号数时, 最高位被看作符号位;看作无符号数时, 最高位也看作数值位(即没有符号位)。对于两个无符号二进制数的加减运算,利用前面说明的有符号数补码表示法的加减运算规则得到的结果仍然是正确的。第55页/共93页2022-7-6561.2.2 有符号数运算的溢出问题 如果计算机的字长为n位, n位二进制数的最高位为符号位,其余n-1 位为数值位,采用补码表示法时,可表示的数X的范围为 -2n-1X2n-1-1 当n=8 时, 可表示的有符号数的范围为-128+127; 当n=16 时,可表示的有符号数的范围为-32768+32

39、767。 两个有符号数进行加减运算时,如果运算结果超出可表示的有符号和的范围时,就会发生溢出,使计算结果出错。很显然, 溢出只能出现在两个同号数相加或两个异号数相减的情况下。第56页/共93页2022-7-657 具体地讲, 对于加运算, 如果次高位(数值部分最高位)形成进位加入最高位,而最高位(符号位)相加(包括次高位的进位)却没有进位输出时;或者反过来,次高位没有进位加入最高位,但最高位却有进位输出时,都将发生溢出。 因为这两种情况分别是:两正数相加,结果超出了范围,形式上变成了负数;两负数相加,结果超出了范围,形式上变成了正数。 01001000B +72 + 01100010B +98

40、 10101010B -86例 2.2.9 (+72)+(+98)有进位无进位溢出, 结果出错第57页/共93页2022-7-658例1.2.10 (-83)+(-80)。 10101101B -83 +10110000B -80101011101B +93 无进位 有进位溢出, 结果出错 对于减运算,当次高不需从最高位借位,但最高位却需借位(正数减负数,差超出范围); 或者反过来,次高位需从最高位借位, 但最高位不需借位(负数减正数,差超出范围), 也会出现溢出。第58页/共93页2022-7-659 例1.2.11 (+72) - (-98)。 01001000B +72 -1001110

41、B -98 10101010B -86 无借位 有借位溢出, 结果出错 例1.2.12 (-83) - (+80)。 10101101B -83 -01010000B +80 01011101B -93有借位无借位溢出, 结果出错第59页/共93页2022-7-6601.3 定点数和浮点数1.3.1 定点法 所谓定点法, 即小数点在数中的位置是固定不变的。以定点法表示的实数称作定点数。通常,定点表示也有两种方法: 方法 1: 规定小数点固定在最高数值位之前,机器中能表示的所有数都是小数。n位数值部分所能表示的数N的范围(原码表示,下同)为 1-2-nN -(1-2-n)第60页/共93页202

42、2-7-661 它能表示的数的最大绝对值为 1-2-n,最小绝对值为 2-n。 方法 2:规定小数点固定的最低数值位之后, 机器中能表示的所有数都是整数。n 位数值部分所能表示的数N的范围为 2n-1N-2(2n-1) 它能表示的数的最大绝对值为 2n-1, 最小绝对值为 1。下面给出定点数的两种表示法。符号位数值位数值位小数点符号位数值位数值位小数点第61页/共93页2022-7-662 因为实际数值很少有都是小数或都是整数的,所以定点表示法要求程序员做的一件重要工作是为要计算的问题选择“比例因子”。所有原始数据都要用比例因子化成小数或整数, 计算结果又要用比例因子恢复实际值。在计算过程中,

43、 中间结果若超过最大绝对值,机器便产生溢出,叫做“上溢”, 这时必须重新调整比例因子。中间结果如果小于最小绝对值, 计算机只能把它当作 0 处理, 叫做“下溢”, 这时也必须重新调整比例因子。结于复杂计算,计算中间需多次调整比例因子。第62页/共93页2022-7-6631.3.2 浮点法 任意一个二进制数N总可以写成下面的形式: N=d2p (2 - 16) 其中: d称为尾数, 是二进制纯小数, 指明数的全部有效数字。前面的符号称作数符,表示数的符号,用尾数前的 1 位表示,0 表示正号,1 表示负号; p称为阶数,它前面的符号称作阶符,用阶码前一位表示,阶符为正时,用 0 表示, 阶符为

44、负时,用 1表示。 由此可知, 将尾部d的小数点向右(对+p)或向左(对-p)移动p位,即得数值N。所以阶符和阶码指明小数点的位置。小数点随着p的符号和大小而浮动。这种数称为浮点数。浮点数的编码格式如下所示:第63页/共93页2022-7-664阶符阶码数符尾数1位 M位 1位 n位 设阶码的位数为m位, 尾数的位数为n位, 则浮点数的取值范围为 2-n2-(2m-1) |N| (1-2-n)2(2m-1)浮点数能表示的数值范围大, 是它的主要可取之处。第64页/共93页2022-7-665 如果尾数的绝对值小于 1 且大于等于 0.5, 即采用原码编码的正数或负数和采用补码编码的正数,其尾数

45、的最高位数字为 1;采用补码编码的负数,其尾数的最高位数字为 0,则该浮点二进制数被称为规格化浮点数。浮点运算后 经常要把结果规格化,规格化的操作是尾数每右移 1 位(相当于小数点左移 1 位),阶码加 1;尾数每左移 1 位,阶码减 1。 数的加减运算要求小数点对齐。 对于浮点表示的数而言, 就是阶码(包括阶符)相等。第65页/共93页2022-7-666 使阶码相等的操作称为对阶。一个浮点数阶码的改变, 必须伴随着尾数的移位,才不改变数的值,即阶码加 1,尾数必须右移 1 位; 若阶码减 1, 则要求尾数左移 1 位。两个规格化的浮点数相加或相减之前必须对阶。 对阶的规则是: 将两个数中阶

46、码小的数的尾数右移、阶码增大,直到与另一个数的阶码相等为止。 这样操作是合理的,因为尾数右移,只可能丢失最低有效位, 造成误差较小。第66页/共93页2022-7-6671.4 二进制编码的十进制数(BCD编码)1.4.1 8421BCD码 如前所述,计算机中是使用二进制代码工作的。 但是由于长期的习惯,在日常生活中,人们最熟悉的数制是十进制。 为解决这一矛盾, 提出了一人比较适合于十进制系统的二进制代码的特殊形式,即将 1 位十进制的 09 这十个数字分别用 4 位二进制码的组合来代表,在此基础上,可按位对任意十进制数进行编码。这就是二进制编码的十进制数,简称BCD码(Binary-Codc

47、d Decimal)。第67页/共93页2022-7-668 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 转换为十进制数第68页/共93

48、页2022-7-669第69页/共93页2022-7-670 (10000101.0101)BCD = 85.5 同一个 8 位二进制代码表示的数, 当认为它表示的是二进制数和认为它表示的是二进制编码的十进制数时, 数值是不相同的。 例如 00011000 作为二进制数时,其值为 24;但作为 2 位BCD码时,其值为 18。 在计算机中, BCD码有两种基本格式: 组合式BCD码格式和分离式BCD码格式。 在组合式BCD码格式中,两位BCD码的十进制数,存放在一个字节中(压缩BCD码)。 如数 82 存放格式为: 1000 0010 第70页/共93页2022-7-671 在分离BCD码格式

49、中, 每位数存放在 8 位字节的低 4 位部分,高 4 位部分的内容与数值无关,如数 82 存放格式为: uuuu1000 uuuu0010 其中u表示任意。第71页/共93页2022-7-6721.4.2 BCD码的加减运算 下面我们以组合式BCD码格式为例讨论BCD码的加法与减法运算。由于BCD编码是将每个十进制数用一组 4 位二进制数来表示,因此,若将这种BCD码直接交计算机去运算, 由于计算机总是把数当作二进制数来运算,所以结果可能出错。 例 2.4.2 用BCD码求 38+49。 0011 1000 38 的BCD码+ 0100 1001 49 的BCD码 1000 0001 81

50、的BCD码第72页/共93页2022-7-673 对应十进制数为 81, 正确结果应为 87, 显然结果是错误的。其原因是,十进制数相加应当是“逢十进一”,而计算机按二进制数运算, 每 4 位为一组, 低 4 位向高 4 位进位与十六进制数低位向高位的情况相当,是“逢十六进一”,所以当相加结果超过 9 时将比正确结果少 6。因此,结果出错。解决的办法是对二进制加法运算的结果采用“加 6 修正”,将二进制加法运算的结果修正为BCD码加法运算的结果。两个两位BCD数相加时,对二进制加法运算结果修正的规则如下: (1) 如果任何两个对应位BCD数相加的结果向高一位无进位时,若得到的结果小于或等于 9

51、,则该位不需修正;若得到的结果大小 9 且小于 16 位,则该位进行加 6 修正。第73页/共93页2022-7-674 (2) 如果任何两个对应位BCD数相加的结果向高一位有进位时(即结果大于或等于 16),该位进行加 6 修正。 (3) 低位修正结果使高位大于 9 时, 高位进行加 6 修正。这种修正称为BCD调整。 下面通过例题验证上述规则的正确性。 2.4.3用BCD码求 35+21。 0011 0101 35 +0010 0001 21 0101 0110 56第74页/共93页2022-7-675 低 4 位, 高 4 位均不满足修正法则, 所以结果正确, 不需修正。 例 2.4.

52、4用BCD码求 25+37。 0010 0101 25 +0011 0111 37 0101 1100 低 4 位满足法则 1 +0000 0110 加 6 修正 0110 0010 62 结果正确 1第75页/共93页2022-7-676 例 2.4.5用BCD码求 38+49。 0011 1000 38 +0100 1001 49 1000 0001 低 4 位满足法则 2 +0000 0110 加 6 修正 1000 0111 87结果正确 1 例 2.4.6用BCD码求 42+95。 0100 0010 42 +1001 0101 95 第76页/共93页2022-7-677 1101

53、 0111 高 4 位满足法则 1 +0110 0000 加 6 修正 10011 01111 37结果正确 1 例 2.4.7用BCD码求 91+83。 1001 0001 91 +1000 0011 83 10001 0100 高 4 位满足法则 2 +0110 0000 加 6 修正 10111 01001 74结果正确 1第77页/共93页2022-7-678例 2.4.8用BCD码求 94+7。 1001 0100 94 +0000 0111 7 1001 1011 低 4 位满足法则 1 +0000 0110 加 6 修正 1010 0001 高 4 位满足法则 3 +0110 0

54、000 加 6 修正 10000 0001 101 结果正确 第78页/共93页2022-7-679例 2.4.9用BCD码求 76+45。 0111 0110 76 +0100 0101 45 1011 1011 低 4 位、 高 4 位均满足法则 1 +0110 0110 同时加 6 修正 10010 0001 121 结果正确 1第79页/共93页2022-7-680 两个BCD码进行减法运算时, 当低位向高位有借位时, 由于“借一作十六”与“借一作十”的差别, 将比正确结果多 6, 所以有借位时, 可采用“减 6 修正法”来修正。 实际上,计算机中有BCD调整指令, 两个BCD码进行加

55、减时, 先按二进制加减指令进行运算, 再对结果用BCD调整指令进行调整, 就可得到正确的十进制运算结果。 另外,BCD码的加减运算,也可以在运算前由程序先变换成二进制,然后由计算机对二进制数运算处理,运算以后再将二进制数结果由程序转换为BCD码。第80页/共93页2022-7-6812.5 ASCII字符代码 现代计算机使用各种程序设计语言, 任何语言都是由字母、数字和符号组成的。要输入程序,计算机必须接受由字母、 数字和符号组成的信息;用户在机器上操作时,总要输入许多监控程序或操作系统所能识别的各种命令, 命令也是由字母、数字和符号组成的。 计算机输出也是这样,把人们可以识别的字母、 数字和符号打印出来或显示在屏幕上。 在计算机内, 任何信息都是用代码表示的,字母、数字和符号(以后简称为字符)也是用代码表示的。第81页/共93页2022-7-682 一般情况下,计算机依靠输入设备把要输入的字符编成一定格式的代码,然后才能接收进来。输出则是相反过程, 为了在输出设备输出字符,计算机要把相应的字符的编码送到外部输出设备。 目前国际上使用的字符编码系统有许多种。在微型计算机中普遍采用的是美国国家信息交换标准字符码。即ACSII码(American Standard Code for Information

温馨提示

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

评论

0/150

提交评论