《《计算机组成原理高分笔记》试读版本.pdf》由会员分享,可在线阅读,更多相关《《计算机组成原理高分笔记》试读版本.pdf(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!此文档由天勤论坛总结转载请注明出处!天道酬勤,厚德载物!天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!第二章数据的表示与运算前篇:运算器的结构任何一种工具的产生,都是为了解决某种问题。挖土机的产生是为了挖土,空调的产生是为了调节室内温度等等。那运算器的产生当然也有它特定的作用。那就是进行 算数运算(加减乘除)和 逻辑运算(移位、与、或等等)。既然我们已经清楚了运算器产生的作用,那么应该怎么来设计运算器的结构呢?下面层层拨开!注意:考研大纲基本上没有涉及逻辑运算,讨论的都是算数运算!首先我们需要提出一个观点
2、:任何算数运算都可以通过加法 和移位 两种操作来完成,只要这个观点成立,我们就可以得出运算器的核心部件就一定是加法器和移位器。至于这个观点是否正确,我们就来验证一下。(1)加法不用验证,肯定可以通过加法器来实现。(2)减法:下面我们来看一个十进制的例子:104-22=82,没错,结果正确,但是这个是减法,加法器不会做。那让我们换一种加法的思路来计算,即先求22 相对于 100 的补码(补码后讲),即 78;然后 104+78=182,最后在对 182 取模,182 mod 100=82,可以得到一样的结果。就可以得出一个结论:减法确确实实可以用加法来实现。(3)乘法/除法:很明显,乘法可以用连
3、续的加来实现,除法可以用连续的减(而减法又可用加法实现)来实现,进而乘法和除法都可以同加法来实现。综上,任何算数运算都可以通过加法 和移位 两种操作来完成。这个观点成立的话,我们就可以大致的画出运算器的基本结构了。如下图:从上面的分析可知,加法器和移位器是核心部件,下面的选择门和通用寄存器组是干什天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!么的?好像又看不懂了,别急,让我们来一一分析吧!首先我们分析一下加法器,加法器一般都是由与或非门或者半加器构成(后讲),这些器件都是没有记忆功能的。现在问题来了,参与运算的数和运算结果应该放在哪里?没错,放在通用寄存器里面,自然而然运
4、算的结果就通过数据总线传递到通用寄存器组了。OK,通用寄存器组知道是干什么的,那选择门是什么东西?既然是叫寄存器组,说明至少得有2 个寄存器吧。大家都知道加法是二目运算(需要 2 个操作数),那应该让哪2 个寄存器里的数参与运算呢?没错,就需要选择门来进行选择。反过来想一想,如果通用寄存器组只有2 个,显然选择门就可以不要了;甚至如果运算器有记忆功能,寄存器组都可以不要了。综上:运算的组成器件为:加法器、移位门、通用寄存器组、输入选择门、数据总线。运算器的结构讲解完毕,下面对考纲知识点一一突破!大纲要求一、数制与编码1.进位计数制及其相互转换2.真值和机器数3.BCD 码4.字符与字符串5.校
5、验码二、定点数的表示和运算1.定点数的表示无符号数的表示,有符号数的表示。2.定点数的运算定点数的移位运算,原码定点数的加/减运算,补码定点数的加/减运算,定点数的乘/除运算,溢出概念和判别方法。三、浮点数的表示和运算1.浮点数的表示浮点数的表示范围,IEEE754 标准。2.浮点数的加/减运算四、算术逻辑单元ALU1.串行加法器和并行加法器2.算术逻辑单元ALU 的功能和结构本章知识体系框架图天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!现实世界的信息文字十进制数二进制数表示二进制数运算加减号表示小数点表示(1)原码(2)补码(3)反码(4)移码(1)定点表示(2)浮点
6、表示算数运算逻辑运算定点运算浮点运算(1)非(2)与(3)或(4)异或(1)加(2)减(3)乘(4)除(1)加(2)减课本导读(成书后会继续补充该模板)一、进位计数制及其相互转换【定位】无,请参考知识点总结与深度扩展1。【可能疑问点】无二、真值和机器数【定位】课本219 页 6.1.2,请参考知识点总结与深度扩展2。【可能疑问点】无三、BCD 码【定位】课本 215 页附录 5B,请参考知识点总结与深度扩展3。【可能疑问点】课本 215 页表 5-3 中的 8421 奇校验码和8421 偶效验码的转换规律简单的解释一下:如果采用 8421 奇校验码,需要在高位补一位,至于是补0,还是补 1,就
7、要看 8421效验码中 1 的个数了,如果后 4 位有奇数个1,那么高位补0,以保证最终1 的个数为奇数,方便进行奇校验,其他以此类推。四、字符与字符串【定位】无,请参考知识点总结与深度扩展4。【可能疑问点】无五、校验码【定位】奇偶校验码:课本216 页;循环冗余校验码:144 页;海明码:课本100 页;请参考知识点总结与深度扩展5。【可能疑问点】关于海明码的编码过程和校验过程,知识点总结与深度扩展5 给出了通俗易懂的讲解,考生可不看教材的讲解。六、定点数的表示天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!【定位】课本219 页 6.1【可能疑问点】不少考生觉得运算器这
8、一章比较晕,很大程度上是因为该章开头的时候就先把一些似乎很难理解的分段函数放在前面讲解,给你一个下马威。最好的解决办法就是不用理睬这些分段函数,比如课本220 页整数原码的定义、小数原码的定义,然后根据定义来求真值的原码,这些全都直接跳过,考研根本不考,为什么要看,就是不看,我们只看要考的,后面有更简单的方法去计算真值的原码、补码、反码、移码,都是一句话解决问题,简单易懂。为什么要去研究这些晦涩难懂的方法?没错,以前是没有人告诉你,现在告诉你了,赶快跳过吧!关于定点数的表示请参考知识点扩展与深度总结6。七、定点数的运算【定位】课本234 页,定点运算必备辅助知识请参考知识点扩展与深度总结7;移
9、位运算请参考知识点扩展与深度总结8;运算器的加减法总结请参考知识点扩展与深度总结9;运算器的乘法请参考知识点扩展与深度总结10;运算器的除法请参考知识点扩展与深度总结11。【可能疑问点】乘除法的硬件配置不需要看,考研不可能会考查电路的设计。另外,乘除法一般不会考查大题,因为完全是死记硬背。但是也不能不看,万一抽出一点细节问题来出选择题也不是不可能,所以考生还是得将算法牢记于心。笔者推荐的办法是将乘除法的所有考查算法各举一个例子,抄写在错题本上,时不时拿出来过一遍。八、浮点数的表示和运算【定位】课本229 页,浮点数的表示总结请参考知识点扩展与深度总结14;IEEE 754 标准总结请参考知识点
10、扩展与深度总结15;浮点数的加减运算总结请参考知识点扩展与深度总结16;【可能疑问点】课本231 页最上面为什么后者比前者可能会多出三位精度?这里不讲解,下面扩展知识点里面有详细讲解。九、算术逻辑单元ALU【定位】课本280 页,串行加法器和并行加法器总结请参考知识点扩展与深度总结17;算术逻辑单元ALU 的功能和结构总结请参考知识点扩展与深度总结18;【可能疑问点】无知识点扩展与深度总结1.二进制,八进制,十进制,十六进制的简单介绍及其之间的相互转换【解析】事实上该知识点并不局限于计算机组成原理这门课,很多的课程都会讲授相关的知识点。在此还是按照大纲要求进行一下基本的知识梳理,已掌握的读者可
11、以跳过该知识点讲解。1、数制也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。按进位的方法进行计数,称为进位计数制。在日常生活和计算机中采用的都是进位计数制。一般来说,比较常用到的进位计数制包括:二进制、八进制、十进制和十六进制。下面一一对其介绍。天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!十进制(Decimalism):关于这个,似乎没必要多说什么,因为日常生活中的进位计数制都是十进制。表示方式:(1234567890)10、1234567890。二进制(Binary):二进制是计算技术中最广泛采用的一种数制,使用0 和 1 两个数码来表示数。在计算机中,
12、则是以电平的高低来表示,通常高电平代表“1”,低电平代表“0”。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由 18 世纪德国数理哲学大师莱布尼兹发现。二进制具有实现简单,适合计算机运算,可靠性高等优点,但也存在着一定的不足,比如表示效率太低,书写不便。(如(255)10=(11111111)2,10 进制 255需要由二进制的8 位来表示,当数码很大时,书写起来相当费事)。由此,便引进了八进制和十六进制。表示方式:(10)2、10B。八进制(Octal)和十六进制(Hexadecimal):规则都是和二进制很相似的,八进制由07 表示数码,进位规则是“逢八进一”,借位规则是
13、“借一当八”;十六进制由09,AF 表示数码,AF 分别对应于十进制的1015,进位规则是“逢十六进一”,借位规则是“借一当十六”。之所以说“引进”这两种进制,主要是为了书写的方便(具体解释见二进制和八进制及十六进制的转换),在机器内的表示并不区别,都仍为二进制。八进制表示方式:(12345670)8、12345670Q(这里之所以用Q,而不是八进制Octal 的首字母O,主要是 为 了 书 写 中 和 0 区 别 开);十 六 进 制 表 示 方 式:(1234567890ABCDEF)16、1234567890ABCDEF H、0 x123456789ABCDEF(编程中使用十六进制的方式
14、,比如一些内存地址都是用这种表示方式)。2、进制之间的相互转换:二进制、八进制、十六进制转为十进制。这里仅以二进制转十进制为例,八进制和十六进制转十进制的方法是一样的,只需调整每一位的权即可。以(10001.10)2为例。每位的位权:位权24232221202-12-2数位1000110每位的位权乘以各自的数位,得到的和相加:241+230+220+21 0+20 1+2-1 1+2-20=17.5至此,得到的17.5 即为该二进制数对应的十进制数(八进制和十六进制,只需把位权中的基数 2 换为 8 和 16 即可,其余步骤一样)。十进制转为二进制、八进制、十六进制:这里仍然以十进制转为二进制
15、为例。【例 2.1】将(17.6875)10转换为二进制。解:在这个转换中,整数部分和小数部分应当分开来进行计算。整数计算规则可以归纳为“除 2 取余,由下而上”:17/2=9 余 19/2=4余 14/2=2余 02/2=1余 01/2=0余 1(结束的标志为相除之后的商为0)天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!然后,将所有的余数,按照从下往上 的顺序写出:10011,此即为十进制数17 的二进制表示。小数部分的计算规则可以归纳为“乘2 取整,由上而下”:0.6875 2=1.375 取 1 余 0.3750.375 2=0.75 取 0 余 0.750.75
16、 2=1.5 取 1 余 0.50.5 2=1 取 1 余 0(结束标志为取1 后余数为 0)然后,将所取的数,按照 从上往下 的顺序写出(整数部分是从下往上,不要搞混):0.1011,此即为十进制数0.6875 的二进制表示。综合,转换为二进制为(10011.1011)2二进制转为八进制、十六进制:具体方法为,从最低有效位(LSD)开始,三位一划分组成八进制数;四位一划分组成十六进制数。高位不足用0 来补齐,参考例2.2。【例 2.2】将二进制码110101111001分别转换成八进制和十六进制解:1101011110016571Q110101111001D79H八进制、十六进制转为二进制:
17、和二进制转为八进制、十六进制的方法正好相反:每位八进制数用其三位二进制表示来“替换”;每位十六进制数用其四位二进制表示来“替换”。6571QD79H110101111001110101111001110101111001注意:在八进制、十进制和十六进制的相互转换中,一个较为容易的方法就是以二进制作为媒介。比如将一个八进制的数转换成十六进制,直接转换显得有点难,可以先将八进制转换成二进制,在将二进制4 位分成 1 组,进而转换成十六进制。2.真值和机器数总结【解析】我们日常生活中看到的+5,-8,-0.1,+3.6等等这些带有“+”或者“-”符号的数称为真值。现在问题来了,如果我们要用计算机处理
18、这些数的话,计算机不认识“+”或者“-”符号怎么办?我们需要具备的思维能力是,一想到2 种状态的事物,都应该联想到二进制的0 和 1,恰好“+”、“-”是 2 种状态,这就可以用二进制的1 和 0 来表示了。那就再做一个规定:0 表示正号,1表示负号。这样的话就可以将一个真值完全数字化了,而被数字化的数就称为机器数(机器数分为原码、补码、反码、移码,后面讲)。3.BCD码总结(压缩型BCD码)【解析】BCD 码的英文为:Binary-Coded Decimal(二进制编码的十进制数)。因此很容易理解,这种码是以二进制数来编码表示十进制的09 十个数码。具体的编码规则,则根据不同的BCD 码而有
19、所不同。天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!常见的 BCD 码分为两类:有权 BCD 码,如 8421(最常用)、2421、5421 等;无权 BCBCDD码,如余 3 码、格雷码等。在这里将主要介绍最常用的8421 码,对其余的BCD 码不需要掌握。提醒:一般不加以说明都是8421BCD码,考研基本也只需要掌握8421BCD码。下面详细介绍一下8421BCD码。8421BCD码就是使用“0”至“9”这十个数值的二进码来表示,在这个表示中,我们称之为“替换”。意思就是,对一个十进制数来说,将它的每一位“替换”为相应的四位二进制代码,再用十六进制数C 表示“+”号
20、,用十六进制数D 表示“-”号,而且均放在数字串的最后,于是便得到该十进制的8421BCD 码表示。例:+3250011001001011100-3250011001001011101需要提醒的一点:当十进制数串为偶数时,在第一个字节的高4 位补“0”,即+560000010101101100-560000010101101101再举一个更加能够深层理解BCD 码的例子:现在将 10 转换成 8421BCD 码,是不是有2种方式可以得到?第一种是将10 看成是 1和 0,直接转为:0001 0000。另外一种方式需要真正理解了8421BCD 码才能想到,即可以把 10 看成是 9+1,也就是8
21、421BCD 码是见到 1001 就进一位,9 的 8421BCD 码是 1001,然后 1001+1=0001 0000(整体往后进一位)。由此,我们得出一个很重要的结论:84218421BCBCBCD D码是遇见 1001 就产生进位,不像普通的二进制码,到1111才产生进位10000。4.字符与字符串总结【解析】计算机中的信息包括数据信息和控制信息,数据信息又可分为数值和非数值信息。非数值信息和控制信息包括了字母、各种控制符号、图形符号等,它们都以二进制编码方式存入计算机并得以处理,这种对字母和符号进行编码的二进制代码称为字符代码(Character Code)。在计算机中,最常用的字符
22、编码便是ASCII 码。基本的ASCII字符集共有128 个字符,其中有96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有32 个控制字符。(ASCII 表很多书上都会有,在这里我们不再贴出)我们有必要记忆住一些基本的编码,比如常用数字的ASCII 码,以及大小写字母的 ASCII 码。其实字母和数字的ASCII码的记忆是非常简单的。我们只要记住了一个字母或数字的ASCII码(例如记住A 为 65,0 的 ASCII 码为48),知道相应的大小写字母之间差32,就可以推算出其余字母、数字的ASCII码。虽然标准ASCII码是7 位编码,但由于计算机基本处理单位为字节(1byte=8
23、bit),所以一般仍以一个字节来存放一个ASCII字符。每一个字节中多余出来的一位(最高位)在计算机内部通常保持为0(在数据传输时可用作奇偶校验位)。除 ASCII 码以外,还有一些其他的常用编码:扩展ASCII 码(对 ASCII 码的扩充,字天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!节的最高为保持为1),EBCDIC 编码(一些大型主机系统如MVS、OS/390 等使用的编码),GB2312 编码(GB 代表“国标”,中国的标准化组织设计的简体汉字编码),Unicode 编码(“通用”编码,统一了很多的编码的一个大整合)等等。在了解了字符编码的基础上,就不难理解字
24、符串编码了。字符串简单来说,就是字符的“集合”,在计算机的存储中,通常在存储器中占用连续的多个字节空间,每个字节存一个字符(若是汉字字符串,则是两个字节存一个汉字)。有一个情况需要知道,当主存字由2个或 4 个字节组成时,在同一个主存字中,既可按从低位字节向高位字节的顺序存放字符串的内容,也可按从高位字节向低位字节的次序顺序存放字符串的内容,这个取决于使用的机器(后面章节中会更深的体会到高低字节的区别)。5.校验码总结(了解即可)【解析】校验码一般分为奇偶校验码、循环冗余效验码、海明码。由于该3 种校验码的实现书上讲解的比较清楚,校验原理不再赘述,在此仅做一个思路的总结。奇偶校验码:为了检验编
25、码的正确性,在被传送的n 位代码上增加一位检验位,并使其配置后的 n+1 位代码中“1”的个数为奇数,则称为奇校验;若配置后“1”的个数为偶数,则称其为偶校验。假设现在使用奇校验,我们来模拟一下检错的过程,进而从中发现奇校验的一些特点(偶校验以此类推)。假设发送端发送1010,那么在待发送数据的前面加上1,使其 1 的个数为奇数,即要传送的数据为:11010;如果接收端收到的数据中1 的个数为偶数个,那么就可以百分百的判断传输过程中出错了,但是不知道是哪一位出错了,所以奇偶校验码不具备纠错功能。另外一种特殊情况是:接收方收到的是11111,1 的个数仍然是奇数个,但是在传输中确确实实有2 位出
26、错了却不能检测出来,所以一旦传输过程中出现偶数个错误,也无法判断是否出错。奇偶校验码实际使用时又分为垂直奇偶校验、水平奇偶校验与水平垂直奇偶校验,上面讲的是属于水平奇偶校验,关于垂直奇偶校验、与水平垂直奇偶校验不需要掌握,知道有就行。循环冗余效验码:循环冗余码的原理比较简单,在此不在赘述,请参考课本144 页。但是有不少考生对循环冗余码中的二进制除法不大理解,在此做一个详细讲解,参考例2.3:【例 2.3】试计算 10110010000/11001解:此类题的解体技巧有三:第一,0 土 1=1,0 土 0=0,1 土 0=1,1 土 1=0;(可以简化为做异或运算,在除法过程中,计算部分余数,
27、全部使用异或操作,相同则为0,不同则为1)第二,上商的规则是看部分余数的首位,如果为1,商上 1;如果为0,商上 0;第三,当部分余数的位数小于除数的位数时,该余数即为最后余数。天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!步骤分析:首先将10110010000 中的 10110 看成部分余数,首位为1,商上 1;结果为:11110,首位为1,商仍然上1;结果为01111,首位为 0,商上 0,图中省略了这一步,直接到 11110,首位为1,商上 1;然后为01110,首位为0,商上 0,图中省略了这一步,又直接到 11100,首位为1,商上 1,到 01010,首位为0
28、,商上 0,到 1010,部分余数小于除数的位数,即最后的余数为1010。总结:循环冗余码进行检错的重要特性:(1)具有 r 检测位的多项式能够检测出所有长度小于等于r 的突发错误;(2)长度大于r+1 的错误逃脱的概率是1/2r。海明码(又称汉明码):海明码是在信息字段中插若干位数据,用于监督码字里的哪一位数据发生了变化,具有一位纠错能力。假设信息位有k 位,整个码字的长度就是k+r;每一位的数据只有两种状态,不是 1 就是 0,有 r 位数据就应该能表示出r2种状态,如果每一种状态代表一个码元发生了错误,有k+r 位码元,就要有k+r 种状态来表示,另外还要有一种状态来表示数据正确的情况,
29、所以rkr+-12才能检查一位错误,即12+rkr。例如,信息数据有4 位,由12+rkr得 r=3,也就是至少需要3 位监督数据才能发现并改正 1 位错误。比如:给 8 个学员进行编号,可以用三位数来编码:学号为 000、001、111;也可以用五位数来编号:学号为00000、00001、00010、00111,但是没有必要用五位呀,只要能满足编码的要求就可以了,所以我们只需要求出满足条件的最小的k值即可。海明码求解具体步骤:确定校验码的位数k 确定校验码的位置 确定数据的位置 求出校验位的值下面开始实战练习。假设我们要推导D=101101这串二进制的海明码,按照步骤一步步来:确定校验码的位
30、数k数据的位数k=6,按照上面说的公式来计算满足条件r 的最小值,如下公式:天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!rkr+-12即:rr+72解此不等式得:满足不等式的最小r=4,也就是D=101101 的海明码应该有6+4=10 位,其中原数据6 位,校验码4 位。确定校验码的位置不妨设设这4 为校验码分别为1P、2P、3P、4P;数据从左到右为1D、2D、6D。编码后的数据共有6+4=10 位,设为1M、2M、10M。校验码iP(i 取 1,2,3,4)在编码中的位置为12-i,如下表所示:确定数据的位置这个很简单,除了校验码的位置其余的就是数据的位置,填充进
31、去就可以了,于是可以把数据信息先填进去,见“乙”行,下面就是最关键的部分,求出校验位的值啦!求出校位的值这个公式不是难,99%左右的考生都能看懂海明码的求解过程,但是真正能够过目不忘的相信就是极少数了,很多考生在论坛抱怨躺在床上眼睛一闭,一睁,就忘记了一半。眼睛再一闭,一睁,基本上就等于没有看了。与其这样,倒不如考前几天突击一下。其实完全没有必要死记硬背,该公式是有规律可循的,基本没有任何一本教材讲过,笔者也是无意中在一篇论文中看见,所以与大家分享。假设出错位为4321eee、e,现在我们需要做的就是将1M、2M、10M和21e、e、43ee、的关系对应出来,只要这个关系出来了,所有的问题都解
32、决了。演示几个,剩下的考生自己推导(看了肯定会)。1M下标中的1 可以表示成0001,这里的0001 分别对应1234eee、e(倒过来看),由于1e的值为 1,所以1M只和1e有关。3M下标中的 3 可以表示成 0011,所以3M和21e、e有关;7M下标中的7 可以表示成0111,所以7M和21e、e、3e有关;其他以此类推,只需要将这些有关的用异或符号连接起来即可,最后可得如下公式:975311MMMMMe=1076322MMMMMe=76543MMMMe=10984MMMe=然后将第步求出那张表中的数据对应过来,即542111PDDDDe=1M2M3M4M5M6M7M8M9M10M甲1
33、P2P3P4P1M2M3M4M5M6M7M8M9M10M甲1P2P1D3P2D3D4D4P5D6D乙101101天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!643122PDDDDe=43243PDDDe=6584PDDe=如果海明码没有错误信息,4321eee、e都为 0,等式右边的值也得为0,由于是异或,所以iP(i 取 1,2,3)的值跟后边的式子必须一样才能使整个式子的值为零,故:54211PDDDD=64312PDDDD=4323PDDD=654PDD=下面只需要将值代入计算即可,54211PDDDD=1010=064312PDDDD=1111=04323PDD
34、D=011=0654PDD=01=1大功告成,把iP的值填写到第步求出的那张表中,看“丙”行,就可以得到海明码。即最后的海明码为:0010011101;但是考研知识点还没有完,知道了怎么编写海明码,当然需要知道怎么校验,如下:现在假设第五位出错了,也就是第五位在传输的过程中被改为”1“了。即得到的数据为 0010111101。现在要找出错误的位置(假设现在不知道出错的位置)。继续使用:975311MMMMMe=01110=11076322MMMMMe=01111=076543MMMMe=0111=110984MMMe=101=0按照1234eee、e的排序方式得到的二进制序列为:0101,恰好
35、对应十进制5,是不是找到了出错的位置?那赶快把第五位取反吧。让我们再来总结一下吧:编写海明码的过程:确定校验位的位数 把数值为按序写出来,NMM,.1,校验码iP(i 取 1,2,3,4)在编码中的位置为12-i,将校验码的位置写出来,然后按序写出数据位 求出出错位mee,.1与NMM,.1的对应关系,然后就可以写出iP与数据位的对应关系,进而求出iP 最后将iP填入数据位,海明码就形成了1M2M3M4M5M6M7M8M9M10M甲1P2P1D3P2D3D4D4P5D6D乙0010011101天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!校验海明码的过程:直接上来写出出错
36、位mee,.1与NMM,.1的对应关系,计算出mee,.1的值 求出二进制序列1,.eem对应十进制的值,则此十进制数就是出错的位数,取反即可得到正确的编码。补充两个概念:(1)海明码如果要检测d 位错误,需要一个海明距为d+1 的编码方案;如果要纠出d位错误,需要一个海明距为2d+1 的编码方案,记住即可;(2)海明码的纠错能力恒小于等于检错能力。以上为海明码全部考研知识点。6.定点数表示的总结【解析】现在请大家思考一个问题,假如现在我要存取一个数到电脑,其真值为-9.87,请问需要考虑几个问题?没错,需要考虑三个问题,即符号位、数码(即987)、小数点,下面我们来一一讨论。符号位的处理:一
37、般来讲符号位的处理有以下2 种方式:(1)干脆不要符号位,采用无符号表示;(2)另一种是要符号位,既然要了符号位,前面讲过真值转换成机器数,我们就需要把符号位数码化,即”0“表示正号,”1“表示负号。以上两种情况就分别引出了无符号数和有符号数。无符号数:就是不考虑数值的符号,比较简单,不再讲解,请参考课本219 页。下面需要花大篇幅讲解一下有符号数。有符号数:前面已经讲过有符号数需要将其符号数字化,即”0“表示正号,”1“表示负号。下面介绍3 种有符号数的表示方法:原码、补码、反码。友情提示:请考生将课本从220 页的原码表示法开始一直到225 页的第十行直接跳过,(就是分段函数表示法,使用其
38、他教材的同学也直接跳过)最多最多看看221 页的补数的概念,因为这几页是给考生带来痛苦的罪魁祸首,这几页的内容完全可以总结为以下几句话:三种机器数的最高位均为符号位。符号位和数值部分之间可用“.”(对于小数)或“,”(对于整数)隔开。当真值为正数时,原码、补码和反码的表示形式均相同,即符号位用“0”表示,数值部分与真值相同。当真值为负数时,原码、补码和反码的表示形式不同,但其符号位都用“1”表示,而数值部分有这样的关系,即补码是原码的“每位求反加1”,反码是原码的“每位求反”,需要注意的是:上面所谓的每位求反均不包括符号位,仅仅是对数值部分进行求反。且原码除了符号位为“1”,数值部分仍然与真值
39、相同。下面分别对定点整数和定点小数举一个例子来加深对以上三句话的理解。直接使用书上的例题,以此来证明那几页确实不同看(-_-),参考例2.4。【例 2.4】假设 x=+1110,根据上面的第二句话,【x】原=0,1110天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!假设 x=-1110,根据上面的第三句话,【x】原=1,1110假设 x=+0.1101,根据上面的第二句话,【x】原=0.1110假设 x=-0.1101,根据上面的第三句话,【x】原=1.1101假设 x=+1010,根据上面的第二句话,【x】补=0,1010假设 x=-1101,根据上面的第三句话,【x】
40、补=1,0011假设 x=+0.1001,根据上面的第二句话,【x】补=0.1001假设 x=-0.0110,根据上面的第三句话,【x】补=1.1010假设 x=+1101,根据上面的第二句话,【x】反=0,1101假设 x=-1101,根据上面的第三句话,【x】反=1,0010假设 x=+0.0110,根据上面的第二句话,【x】反=0.0110假设 x=-0.0110,根据上面的第三句话,【x】反=1.1001从上表可以得出一个结论:通过加减法来变换原码、补码和反码是很繁琐的。而通过上面第二句和第三句话来变换是相当简单的。知识点补充:(1)原码变补码,原码变反码可以通过上面的2 句话,而补码
41、变回原码,反码变回原码仍然可以使用上面的第二句和第三句话,在此仅举一个例子,参考例2.5:【例 2.5】设 x=-1101,那么【x】原、【x】补、【x】反分别是 1,1101、1,0011,现在需要将【x】补转换为【x】原,将 1,0011 除符号位的各位取反加1,得到 1,1101,和原来的结果是一样的,其他的转换以此类推,不再赘述!(2)下面讨论一下 零的原码、补码、反码当 x=0 时【+0.0000】原=0.0000【-0.0000】原=1.0000【+0.0000】补=0.0000【-0.0000】补=0.0000【+0.0000】反=0.0000【-0.0000】反=1.1111【
42、-0.0000】补=0.0000 需要解释一下,首先【-0.0000】补是【-0.0000】原除符号位的各位取反加1,【-0.0000】原=1.0000,各位取反加1 得到 10.0000,由于采用了模2天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!原则,即 10.0000mod 2=0.0000,所以【-0.0000】补=0.0000.还有一种说法就是直接将最高符号的进位舍去。仍然也可以得到【-0.0000】补=0.0000。综上所述:0 的原码和反码都有2 种,补码只有唯一的一种。从上面的结论我们又可以引出一个结论,既然“零”在补码中只有一种表示形式,故补码可以比原码
43、和反码多表示一个负数。下面的表格就对原码、补码、反码的范围做了一个总结(假设机器数字长为8 位):原码-127127补码-128127反码-127127化简成一般的形式为(假设机器数字长为n 位,包含一位符号位):原码-(2n-1-1)(2n-1-1)补码-2n-1(2n-1-1)反码-(2n-1-1)(2n-1-1)当然,上面的总结仅仅是定点整数,如果是定点小数的话,补码也应该比原码和反码多表示一个数,这个数就是-1,即原码和反码的定点小数范围为:(-1,1),而补码定点小数的范围是-1,1),要记住哦!(3)无符号数和有符号数的范围区别同样是一个字节,无符号数的最大值是255,而有符号数的
44、最大值是127。原因是有符号数中的最高位被挪去表示符号了。并且,我们知道,最高位的权值也是最高的(对于1字节数来说是 2的7次方=128),所以仅仅少于一位,最大值立即减半。不过,有符号数的长处是它可以表示负数。因此,虽然它的在最大值缩水了,却在负值的方向出现了伸展。我们仍以一个字节的数值对比:无符号数:0-255有符号数:-128-0-127同样是一个字节,无符号的最小值是0,而有符号数的最小值是-128。所以二者能表达的不同的数值的个数都一样是256个。只不过前者表达的是 0到255这256个数,后者表达的是-128到+127这256个数。(4)已知【x】补求【-x】补证明过程不要求,记住
45、结论即可,不论真值是正是负,发现由【x】补连同 符号位在内每位取反,末位加1,即可得【-x】补,参考例 2.6:【例 2.6】已知【x】补=1.0010010,那么首先将1.0010010连同符号位取反,得到0.1101101,然后再加 1,得到【-x】补=0.1101110。(5)移码天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!首先,我们得清楚为什么要有移码这个东西,这得先介绍一下补码这家伙的一个缺点。请看下例:十进制数 x=21,对应的二进制数为+10101,则【x】补=0,10101十进制数 x=-21,对应的二进制数为-10101,则【x】补=1,01011十进
46、制数 x=31,对应的二进制数为+11111,则【x】补=0,11111十进制数 x=-31,对应的二进制数为-11111,则【x】补=1,00001上述补码表示中“,”在计算机内部是不存在的,因此,从代码形式上看,符号位也是一位二进制数。按这 6位二进制代码比较大小的话,会得出 101011 010101,100001 011111,其实恰好相反。这就是补码的一大缺点,有没有办法来弥补这一缺点呢?没错,就是通过移码来弥补,下面引入移码的概念。还是先看到上面的例子,如果对每一个真值加上一个2n(n 为整数的位数,比如上面的例子 n 就等于 5),情况就发生了变化。例如:x=10101 加上 2
47、5可得 10101+100000=110101x=-10101 加上 25可得-10101+100000=001011x=11111加上 25可得11111+100000=1111111x=-11111 加上 25可得-11111+100000=000001比较结果可知,110101 001011,111111 000001,这样一来真值的大小就可以很容易的从 6 位代码本身看出来。而上面在真值上加2n就是移码,前面我们讲过,在计算机中假设机器字长是n 位(在这里假设不包含符号位有n 位),那么其补码的表示范围是:-2n(2n-1),很显然,移码的表示范围就是区间两端各加2n,即 0(2n+1
48、-1)。原码转化成补码、反码都有简单的记忆方式,那转换成移码有没有简单的记忆方式呢?答案是肯定的。首先让我们分析一下补码和移码的符号位(以上例为例)。补码移码0101011101011010110010110111111111111100001000001从上表中可以得出一个结论:移码就是补码的符号位取反。当然,从另一个角度我们也可以解释的通,假设补码的符号位为0,如果加上2n的话,自然0 就变成 1;如果补码的符号位是 1,加上 2n自然就变成了10,由于最高符号位进位需要舍弃,自然又变成了0。另外,由于“零”的补码形式是唯一的,既然移码是补码的符号位取反,可以得出“零”的移码表示也是唯一的
49、。最后,由移码的定义可知,当n=5 时,其最小的真值为-25,而移码就是在真值上加25,所以最小真值的移码为全0,这符合人们的思维习惯。利用移码这一特点,当浮点数的阶码用移码表示时,就能很方便地判断阶码的大小。数码的处理:采用二进制来表示数码。为什么一定要用二进制?这个就和计算机表示数码的方式有关了。通常,在计算机中,数码是由电平的高低来表示的。一般高电平代表数字“1”,低电平代表数字“0”;所以采用二进制容易实现,以后做选择题的时候注意!但是问题也就出来了,使用二进制来表示数码的效率太低了,书写起来也非常的冗长。比如十进天勤论坛:天勤论坛专为计算机考研学子打造的专业交流平台期待你的加入!制的
50、 255,二进制需要8 位来表示(11111111),那更大一点的数还了得?所以就需要改变,从而引进了组合二进制数,即八进制和十六进制。比如110101111001110 101 1110016571Q1101 01111001D79H很明显,书写起来会舒服很多。但是可以发现不管是二进制、八进制、十六进制,在计算机内部的表示永远都是110101111001,所以说组合二进制数的引入完全是为了书写方便。小数点的处理:假设在寄存器中存储了10100011,那么计算机怎么知道哪些是小数点前面的数,哪些是小数点后面的数?下面引入阶码来解释这个问题。首先,任意一个二进制数 S都可以表示成:S=2E(M0