1、第1章 计算机的数制及其转换1.1 计算机的数制及其转换计算机的数制及其转换 1.2 计算机中数与字符的编码计算机中数与字符的编码1.3 微型计算机的性能分析及分类微型计算机的性能分析及分类教学提示:任何数据在计算机中都用二进制表示,而数据又有数值数据和非数值数据两种。数值数据常用的编码有原码、反码和补码。由于补码编码有许多优点,因此大多数微机数字与字符采用补码进行编码。在计算机内部的十进制数的编码通常是BCD码。对于非数值数据,英文字母及符号通常用ASCII编码,而汉字则需要两个字节来进行编码。数制及其转换、数与字符的编码是计算机的基础。教学要求:本章主要介绍计算机的数制及其转换,数与字符的
2、编码,微型计算机的性能等相关知识。通过本章的学习使学生了解微型计算机的特点、分类、主要技术指标;掌握计算机中的数制及其转换,计算机数据和字符的编码。电子计算机(Computer)是20世纪人类最重要的科技发明与成果之一。计算机是一种能够自动、高速、精确地进行信息处理的现代化电子设备,具有算术运算和逻辑判断能力,并能通过预先编好的程序来自动完成数据的处理。自1946年世界上第一台计算机问世以来,计算机经历了迅速的发展,获得了广泛的应用,极大地改变着人们的工作、学习和生活方式,并对国民经济的发展和科学技术的进步产生了巨大的推动作用。它的广泛应用是信息时代到来的主要标志。计算机按其性能、体积和价格分
3、为巨型机、大型机、中型机、小型机和微型机五类。微型计算机属于第四代电子计算机产品,即大规模及超大规模集成电路计算机,是电路技术不断发展、芯片集成度不断提高的产物。它诞生于20世纪70年代,由于它体积小,性价比高,因此广泛地应用在各行各业和家庭中,大大推广和普及了计算机及其技术的应用,加速了信息化社会的进程。计算机的最基本功能是进行数据的计算和加工处理。计算机中的数是以器件的两个不同物理状态来表示的,一个具有两种不同的稳定状态且能相互转换的器件即可用来表示一位二进制数。计算机中采用的就是二进制数字系统。凡是需要由计算机处理的各种信息,无论是文本、字符、图形,还是声音、图像,在输入计算机内部时,都
4、必须以二进制编码(不是数)来表示,以方便存储、传送和处理。1.1 计算机的数制及其转换计算机的数制及其转换计算机内部的信息分为两大类:控制信息和数据信息。控制信息是一系列控制命令,用于控制计算机进行相应的操作;数据信息是计算机操作的对象,通常又可分为数值数据和非数值数据。数值数据用于表示数量的大小,有确定的数值;非数值数据不表示数量的大小,而表示字符、汉帧辑数据等信息。计算机所要处理的信息都要用“0”和“1”两个基本符号(即基2码)来编码表示,这是因为以下三个原因:(1)基2码在物理上最易实现。例如,可用“1”和“0”分别表示高、低两个电位,或表示脉冲的有无或正负极性等,其可靠性较高。(2)采
5、用基2码表示二进制数,其编码、加减等运算规则简单。(3)基2码的两个符号“1”和“0”正好可用来表示逻辑数据的“真”与“假”,可使计算机的逻辑运算简单方便。因此,计算机内部的各种信息都是用二进制编码来表示的。1.1.1 数与数制1.数制的基本概念人们在长期的生产实践和日常生活中创造了应用各种数字符号表示事物数量的方法,这些数的表示方法称为数制。数制是以表示数值所用的数字符号的个数来命名的,数制有多种形式,例如人们最常用到的十进制。生活中也常常用到其它进制,如十二进制、十六进制、六十进制,以及计算机中使用的二进制等。进位计数制,又称位置计数制,是用一组固定的数字符号和统一的进位规则进行计数的科学
6、方法,简称进位制。凡是按进位的方法计数的数制都是进位计数制,它有一个规则,就是N进制必须逢N进一。进位制中还有数码、基数、权三个常用术语。数码:数制中表示数值大小的不同数字符号。例如,十进制中有0、1、2、3、4、5、6、7、8、9共10个数码。基数:也称基,是指某进位计数制中每个数位(数字位置)上允许选用的基本数码的个数。如二进制数的基数为2,N进制数的基数为N。基数体现了该数制中进位和借位的原则:当在某一位数上计够一个基数时需要向上进1;反之,从上位借1在下位当一个整基数来使用。权:数制中每一个数位所具有的基值(即此数位上所表示出来的最小数值)称为该位上的权,也称位权。由于存在进位,同一数
7、字符号在不同的数位上所代表的数值是不同的。权一般以相应进位制的基数幂的形式来表示。例如,十进制数1234.56,每个数位上的权是10的某次幂,从左到右各位上的权分别为:103、102、101、100、101、102。每个数位上的数字所表示的数值是这个数字和该数位的权的乘积。因此,对任意进位制数都可以写成按权展开的幂的多项式和的形式:式(1.1)中,i是数位;n和m为正整数,n表示小数点左边的位数,m表示小数点右边的位数;ai是任意进位制数N的第i位的数码;R为基数,Ri为第i位的权。总的来看,各种进位计数制均有以下几个主要特点:(1)每种计数制有一个确定的基数R,其数码个数等于基数,最大数码比
8、基数小1。(2)每个数位上的数码乘以该数位的权就得到该数位上的数字所表示的数值。(3)低位向高位的进位规则是“逢基数R进一”。在混合小数中,小数点右移一位相当于乘以R;反之,相当于除以R。为了区别各种计数制的数据,常采用下述两种方法来表达:(1)在数字后面加相应的英文字母来表示该数的数制。如:十进制数用D(Decimal)表示,通常计算机操作中默认使用的是十进制,所以十进制数的后缀可以省略;二进制数用B(Binary)表示,如101110B;八进制数用O(Octal)表示,为了不和0混淆,也可以用Q来表示八进制数,如346Q;十六进制数用H(Hexadecimal)表示,如19H。(2)在括号
9、外边加数字下标,这种表示方法比较直观。例如二进制数10101可以写成(10101)2。2.几种常用的进位计数制计算机中采用的是二进制计数制。但是,由于书写、键入、读出二进制数时极易出差错,而微机的字长又都是4的整数倍数(分别为4位、8位、16位、32位和64位等),考虑到238、2416,因此在编程时,为了使书写和阅读既方便又不易出错,还常常采用八进制计数和十六进制计数。此外,人们对十进制计数最为熟悉,因此输入和输出计算机的数经常使用十进制数来表示。这样各种进位计数制之间就存在着一种对应转换关系。(1)十进制数(DecimalNotation)。人们习惯使用的十进制数有以下特点:10个数码,即
10、0、1、2、3、4、5、6、7、8和9。十进制数的基数是10,可以用09十个数字和一个小数点符号来表示任意十进制数。每个数码表示的值不仅取决于数码本身,还取决于它所处的位置。相同的数码在不同位置的权不同,所表示的数值不同。十进制数各位的权是10的整数次幂。例如,个位的权为100,十位的权为101,百位的权为102等。遵从“逢十进一,借一当十”的规则。例1.1 333.33333.33D(333.33)10 31023101310031013102(2)二进制数(BinaryNotation)。二进制数有以下特点:2个数码,即0和1,二进制数的基数是2。二进制数各数位上的权是2的整数次幂。小数点
11、左边的权是2的正次幂,小数点右边的权是2的负次幂。二进制数的值可以用它的按权展开式表示。遵从“逢二进一,借一当二”的规则。例1.2 1011.01B(1011.01)2123022121120021122另外,二进制数还具有一些独特的性质,这些性质奠定了当代计算机的设计基础。这些性质是:具有两个不同的数码,很容易在自然界中找到两个不同的稳定状态来表示。小数点向右移一位,数值增大一倍;反之,即小数点向左移一位,数值减小一半。对于二进制的整数而言,若其最低位为1,则值为奇数;最低位为0,则值为偶数。二进制数的运算规则简单。如:000;011;101;110(此时向上进位1)。可见,两个一位的二进制
12、数相加运算,其本位和的运算正好是二值异或逻辑运算的关系,进位则是二值与逻辑运算的关系。所以,在计算机中,二进制数的运算是用逻辑运算来实现的。(3)八进制数(OctalNotation)。八进制数有以下特点:8个数码,即0、1、2、3、4、5、6和7,八进制数的基数是8。八进制数各数位上的权是8的整数次幂。八进制数的值也可以用它的按权展开式来表示。遵从“逢八进一,借一当八”的规则。例1.3 248.15Q(248.15)8282481880181582(4)十六进制数(HexadecimalNotation)。十六进制数有以下特点:16个数码,即0、1、2、3、4、5、6、7、8、9、A、B、C
13、、D、E和F,其中AF表示1015这六个数,十六进制数的基数是16。十六进制数各数位上的权是16的整数次幂。十六进制数的值也可以用它的按权展开式来表示。遵从“逢十六进一,借一当十六”的规则。例1.4 69C.B5H(69C.B5)166162916112160111615162注意:在实际表示时,一个十六进制数如果最高位数字为字母(AF),则在字母前面必须加一个0,以便与指令名、变量名、数据等相区别,如0E0H。二进制数、八进制数和十六进制数之间存在特殊的关系,即一位八进制数恰好可以用三位二进制数来表示;一位十六进制数恰好可以用四位二进制数来表示,即八进制数和十六进制数可作为二进制数的缩写形式
14、,且它们之间的关系是唯一的。计算机中常用的二进制数、八进制数、十进制数和十六进制数之间的对应关系如表1.1所示。表1.1 二进制、八进制、十进制和十六进制的对应关系1.1.2 不同数制间的转换由于人们习惯用十进制计数,在研究问题或讨论解题的过程时,总是用十进制来考虑和书写的。当考虑成熟后,要把问题变成计算机能够“看得懂”的形式时,就需把问题中的所有十进制数转换成二进制数,这就需要用到“十进制数转换成二进制数的方法”。在计算机运算得到二进制数的结果时,又需要用到“二进制数转换为十进制数的方法”,才能把运算结果用十进制形式显示出来。同样,有时我们也需要实现十进制数和其它进位制数之间的转换以及二进制
15、数和八进制数、十六进制数之间的转换。所有这些不同进制的数码之间的转换都叫做数制转换。1.二进制数与十进制数之间的转换1)二进制数转换成十进制数将一个二进制数转换成十进制数十分简单,只要将二进制数的每一位(0或1)分别乘以它所对应的权,然后把各乘积项加起来就可以求得二进制数的十进制数值。简单地说就是“按权展开后相加求和”。例1.5 将二进制数1101.101转换为十进制数。其转换过程如下:1101.101B(1101.101)21231220211201210221238410.50.12513.625故 1101.101B13.6252)十进制数转换成二进制数十进制数转换为任意非十进制数时,整
16、数和纯小数的转换方法不同。一个既有整数部分又有小数部分的十进制数,则须对整数和小数两部分分别进行转换,然后再组合起来。十进制整数转换为二进制整数。十进制整数转换为二进制整数通常采用以下两种方法:方法一:减权定位法,也称降幂法。具体做法是将十进制数作为被减数,依次同距它最近的二进制高位权值比较,若够减则减去该位权值,并使对应位数码为1,再将差值作为被减数往下比较;若不够减,对应位数码为0,然后越过该位与低一位权值比较,重复此过程,直到差为0或达到所需精度(对应小数转换时)为止。此种方法既可用于整数的转换,又可用于小数的转换。该方法也可用于十进制数和八进制数、十进制数和十六进制数的转换。例1.6
17、用减权定位法将163.75转换为二进制数。方法二:十进制整数转换为二进制整数更多的采用“除2取余,逆序排列”法。具体做法是将十进制整数除以二进制的基数2,得到一个商和一个余数;取其余数(必定是0或1)作为相应二进制整数的最低位A0,然后继续用商除以2,又得到一个商和一个余数;取其余数作为二进制整数的次低位A1,依次重复此过程,直到商为0为止。注意:第一次得到的余数为二进制数的最低位,最后得到的余数为二进制数的最高位。依次从最高位到最低位写出,就是整数部分的二进制数。十进制小数转换为二进制小数。十进制小数转换成二进制小数采用“乘2取整,顺序排列”法。具体做法是用二进制基数2乘以十进制小数,可以得
18、到积的整数和小数部分,将积的整数部分(当十进制小数大于0.5时整数位为1,当该小数小于0.5时整数位为0)取出,作为二进制小数的小数点后的第一位(小数部分的最高位)A1,然后再用2乘以余下的小数部分,又得到一个积,再将积的整数部分取出作为小数部分的第二位A2,如此重复该过程,直到积中的小数部分为0,或者达到所要求的精度为止(有乘不尽的可能)。然后把每次取出的整数部分(必定是0或1)按先后顺序从左到右排列起来,就得到转换后的二进制小数。注意:第一次取出的整数为二进制小数的最高位,最后一次所取得的整数为其最低位。例1.7 将十进制数139.8125转换成二进制数。其转换过程如下:整数部分的转换:1
19、39269 余数为1,对应二进制位A01(最低位)69234余数为1,对应二进制位A1134217余数为0,对应二进制位A201728余数为1,对应二进制位A31824余数为0,对应二进制位A40422余数为0,对应二进制位A50221余数为0,对应二进制位A60120余数为1,对应二进制位A71(最高位)整数部分的转换结果:(139)10(10001011)2小数部分的转换:0.812521.625 整数为1,对应二进制位A11(最高位)0.62521.25整数为1,对应二进制位A210.2520.5整数为0,对应二进制位A300.521.0整数为1,对应二进制位A41(最低位)小数部分的转
20、换结果:(0.8125)10(0.1101)2最后转化结果为:(139.8125)10(10001011.1101)2或139.8125D10001011.1101B例1.8 将十进制数27.3转换为二进制数,要求其精度为4%。其转换过程如下:整数部分的转换:27213 余数为1,对应二进制位A01(最低位)1326余数为1,对应二进制位A11623余数为0,对应二进制位A20321余数为1,对应二进制位A31120余数为1,对应二进制位A41(最高位)整数部分的转换结果:(27)10(11011)2小数部分的转换:由于精度要求为4,故应该令2m452,可得2m5225,则m5,即要求其误差不
21、大于25。0.320.6 整数为0,对应二进制位A10(权为21,最高位)0.621.2整数为1,对应二进制位A210.220.4整数为0,对应二进制位A300.420.8整数为0,对应二进制位A400.821.6整数为1,对应二进制位A51(权为25,最低位)小数部分的转换结果:(0.3)10(0.01001)2最后转化结果为:(27.3)10(11011.01001)22.八进制数与十进制数之间的转换1)八进制数转换成十进制数同二进制转换成十进制的方法相似,即按权展开后相加求和。例1.9 将八进制数126.14转换为十进制数。其转换过程如下:126.14Q(126.14)818228168
22、0181482641660.1250.062586.1875 即 (126.14)886.18752)十进制整数转换成八进制整数十进制整数转换为八进制整数采用“除8取余,逆序排列”法。具体做法是将十进制整数除以八进制的基数8,得到一个商和一个余数;取其余数(必定是小于8的整数)作为相应八进制整数的最低位A0,然后继续用商除以8,又得到一个商和一个余数;取其余数作为八进制整数的次低位A1,依次重复此过程,直到商为0为止。注意:第一次得到的余数为八进制数的最低位,最后得到的余数为八进制数的最高位。依次从最高位到最低位写出,就是整数部分的八进制数。3)十进制小数转换为八进制小数十进制小数转换成八进制
23、小数采用“乘8取整,顺序排列”法。具体做法是用八进制基数8乘以十进制小数,可以得到积的整数和小数部分,将积的整数部分(必定是小于8的整数)取出,作为八进制小数部分的最高位A1,然后再用8乘以余下的小数部分,又得到一个积,再将积的整数部分取出作为八进制小数部分的第二位A2,如此重复该过程,直到积中的小数部分为0,或者达到所要求的精度为止。然后把每次的整数部分按先后顺序从左到右排列起来,就得到转换后的八进制小数。例1.10 将十进制数239.32转换成八进制数(转换结果取4位小数)。其转换过程如下:整数部分的转换:239829 余数为7,对应八进制位A07(最低位)2983余数为5,对应八进制位A
24、15380余数为3,对应八进制位A23(最高位)整数部分的转换结果:(239)10(357)8小数部分的转换:0.3282.56 整数为2,对应八进制位A12(最高位)0.5684.48 整数为4,对应八进制位A24 0.4883.84 整数为3,对应八进制位A33 0.8486.72 整数为6,对应八进制位A46(最低位)小数部分的转换结果:(0.32)10(0.2436)8最后转化结果为:(239.32)10(357.2436)8或239.32D357.2436Q3.十六进制数与十进制数之间的转换1)十六进制数转换成十进制数同二进制数转换成十进制数的方法相似,按权展开后相加求和。例1.11
25、 将十六进制数5F6.C8转换为十进制数。其转换过程如下:5F6.C8H(5F6.C8)165162151616160121618162128024060.750.031251526.78125即 5F6.C8H1526.78125D2)十进制整数转换成十六进制整数十进制整数转换为十六进制整数采用“除16取余,逆序排列”法。具体做法是将十进制整数除以十六进制的基数16,得到一个商和一个余数;取其余数(必定是小于F的数)作为相应十六进制整数的最低位A0,然后继续用商除以16,又得到一个商和一个余数;取其余数作为十六进制整数的次低位A1,依次重复此过程,直到商为0为止。注意:第一次得到的余数为十六
26、进制数的最低位,最后得到的余数为十六进制数的最高位。依次从最高位到最低位写出,就是整数部分的十六进制数。3)十进制小数转换为十六进制小数十进制小数转换成十六进制小数采用“乘16取整,顺序排列”法。具体做法是用十六进制基数16乘以十进制小数,可以得到积的整数和小数部分,将积的整数部分(必定是小于F的数)取出,作为十六进制小数部分的最高位A1,然后再用16乘以余下的小数部分,又得到一个积,再将积的整数部分取出作为十六进制小数部分的第二位A2,如此重复该过程,直到积中的小数部分为0,或者达到所要求的精度为止。然后把每次获得的整数部分按先后顺序从左到右排列起来,就得到转换后的十六进制小数。例1.12
27、将十进制数58312.46转换成十六进制数(转换结果取4位小数)。其转换过程如下:整数部分的转换:58312163644 余数为8,对应十六进制位A08(最低位)364416227余数为12,对应十六进制位A1C2271614余数为3,对应十六进制位A2314160余数为14,对应十六进制位A3E(最高位)整数部分的转换结果:(58312)10(E3C8)16小数部分的转换:0.46167.36 整数为7,对应十六进制位A17(最高位)0.36165.76 整数为5,对应十六进制位A25 0.761612.16 整数为12,对应十六进制位A3C 0.16162.56 整数为2,对应十六进制位A
28、42(最低位)小数部分的转换结果:(0.46)10(0.75C2)16最后转化结果为:(58312.46)10(E3C8.75C2)16或58312.46D0E3C8.75C2H4.二进制数、八进制数和十六进制数之间的转换由于238,2416,3位二进制数可以有8个状态,即000111,正好是八进制,而4位二进制数可以有16个状态,即00001111,正好是十六进制。这说明每三位二进制数对应一位八进制数;每四位二进制数对应一位十六进制数,因此二进制数与八进制数和十六进制数之间的相互转换很容易实现。1)二进制数转换成八进制数二进制数转换成八进制数的方法是将二进制数从小数点所在位开始,向左每三位分
29、成一组,然后写出每一组的等值八进制数,若小数点左侧的位数不是3的整数倍,则在二进制数的最左侧补0,这样得到整数部分的八进制数;向右也每三位分成一组,然后写出每一组的等值八进制数,若小数点右侧的位数不是3的整数倍,则在二进制数的最右侧补0,得到小数部分的八进制数,最后把整数部分和小数部分顺序排列起来就得到所要求的八进制数。例1.13 将二进制数10100011.11B转换成八进制数。其转换过程如下:先分组010 100 011 .110 243.6所以,转换的结果为:10100011.11B243.6Q2)八进制数转换成二进制数八进制数转换成二进制数的方法是将每一位八进制数分别转换成对应的三位二
30、进制数,按顺序排列后即为八进制数所对应的二进制数。例1.14 将八进制数146.703Q转换成二进制数。其转换过程如下:146.703 001100110.111000011所以,转换的结果为:146.703Q1100110.111000011B3)二进制数转换成十六进制数二进制数转换成十六进制数的方法是将二进制数从小数点所在位开始,向左每四位分成一组,然后写出每一组的等值十六进制数,若小数点左侧的位数不是4的整数倍,则在二进制数的最左侧补0,这样得到整数部分的十六进制数;向右也每四位分成一组,然后写出每一组的等值十六进制数,若小数点右侧的位数不是4的整数倍,则在二进制数的最右侧补0,得到小数
31、部分的十六进制数,最后把整数部分和小数部分顺序排列起来就得到所要求的十六进制数。例1.15 将二进制数10100011.111001B转换成十六进制数。其转换过程如下:先分组1010 0011 .1110 0100A3 .E4所以,转换的结果为:10100011.111001B0A3.E4H4)十六进制数转换成二进制数十六进制数转换成二进制数的方法是将每一位十六进制数分别转换成对应的四位二进制数,按顺序排列后即为十六进制数所对应的二进制数。例1.16 将十六进制数75A.88H转换成二进制数。其转换过程如下:75A.88011101011010.10001000所以,转换的结果为:75A.88
32、H11101011010.10001B八进制数和十六进制数主要用来简化二进制数的书写。由于采用八进制数和十六进制数表示的二进制数较短,且便于记忆,所以在PC机中主要使用十六进制数表示和编码二进制数,所以必须十分熟悉二进制数与十六进制数的对应关系。另外,十六进制数和八进制数之间也可以进行相互转换,一般可通过先将十六进制数(或八进制数)转换成二进制数,然后再将二进制数转换成八进制数(或十六进制数)。若要将十进制数转换成八进制或十六进制数,除采用前面介绍过的方法外,还可先将其转换成二进制数,然后再分组,进而转换成八进制数或十六进制数。5.二进制数的算术运算采用二进制实现各种算术与逻辑运算,是因为二进
33、制数中每一位都只有0和1两个数。它们表示两种不同状态,所以其物理过程很容易实现,如它很好地对应着电位的高与低、电流的有与无及半导体的饱和与截止等。而且,二进制数的算术运算规则也比十进制数的要简单得多,了解到二进制数加法规则是“逢二进一”、减法规则是“借一当二”,再根据十进制数算术运算的方法,很容易理解和完成二进制数的算术运算。1)加法运算规则 000 011 101 110,且向高位产生进位1,逢二进一例1.17 计算10110101B1101001B。加法过程如下:可得10110101B1101001B100011110B2)减法运算规则 000 101 110 011,且向高位产生借位1,
34、借一当二例1.18 计算10110101B1101001B。减法过程如下:可得10110101B1101001B1001100B3)乘法运算规则000010100111可见,仅当两个1相乘时结果为1,否则结果为0。因此,二进制数的乘法非常简单。若乘数位为0,则乘积为0;若乘数位为1,则乘积结果等于被乘数。例1.19 计算10110B11001B。乘法过程如下:可得10110B11001B1000100110B二进制数乘法过程从乘数的低位开始,用乘数的每一位分别去乘以被乘数,每次相乘所得中间结果称为部分积,把部分积的最低有效位与相应乘数位对齐后,同时相加得到乘积。两个8位二进制数相乘,结果为16
35、位,如果乘积不足16位,则在乘积的前面补0(补足16位)。4)除法运算规则010111除法运算是乘法的逆运算,其方法与十进制除法是一样的。例1.20 计算1110101B1001B。除法过程如下:可得1110101B1001B1101B5)计算机中的四则运算二进制数也可完成加、减、乘、除四则运算,笔算时,运算过程不但很清楚而且很方便,但对计算机来说,实现起来很不方便。在计算机中二进制数的四则运算最终都可以转化为带符号的加法运算,所以在CPU内部只有加法器。可把乘法运算通过部分积右移加被乘数或0的办法来实现,也可采用被乘数左移加部分积的方法实现,乘法实质上是做移位加法;而除法实质则是做移位减法,
36、把除法运算通过部分余数左移加除数补码来实现,也可采用被除数右移加除数补码或0的方法来实现;把减法运算通过加补码来实现,其方法是将减数B变成其补码后,再与被减数A相加,其和(如有进位的话,则舍去进位)就是两数之差。补码将在1.2小节讨论,此处仅对实现乘法运算加以说明。例1.21 计算1011B1101B。被乘数a1011 乘数b1101 乘数末位b0为1,所以在s的初值0000上加被乘数,得到新部分积,然后部分积向右移一位。此时乘数位为b10,所以给部分积加0000,得到新部分积,然后将部分积向右移一位。此时乘数位为b21,所以给部分积加被乘数1011,得到新部分积,然后将部分积向右移一位。此时
37、乘数位为b31,所以给部分积加被乘数1011,得到新部分积,然后将部分积向右移一位。可见,4位数乘4位数变成了4次相加、4次移位,每次相加都是两个4位数相加。部分积s 计算结果为:1011B1101B10001111B6.二进制数的逻辑运算逻辑表示输入与输出的一种因果关系。用字母和符号代替文字来进行运算推理的方法称为逻辑代数或布尔代数,也称开关代数。逻辑代数和一般代数不同,一般代数变量的值是连续的,而计算机中的逻辑关系是一种二值逻辑,其逻辑代数中变量的值只有两个:1和0。尽管在逻辑代数中某些运算规则和普通代数相同,但逻辑代数中的0和1与普通代数中的数值0和1不同,它只代表逻辑分析的两种对立状态
38、,不表示数学中0和1的数值大小。逻辑运算的特征是对二进制数按对应位独立进行运算,而和其它位的运算结果无关,各位之间无高、低位之分,不存在进位和借位关系,其逻辑运算结果也是逻辑值。逻辑代数有三种基本的运算关系:逻辑加法(“或”运算)、逻辑乘法(“与”运算)、逻辑否定(“非”运算或称“反”运算)。其它复杂的组合逻辑关系都可以由这三种基本逻辑关系组合而成。下面介绍常用的“与”、“或”、“非”及“异或”四种运算。1)“与”运算(AND)“与”运算又称逻辑乘,运算符号可用“AND”、“”、“”或“”表示,其运算规则如下:000010100111 即两个逻辑位进行“与”运算,只要有一位为0,则运算结果为0
39、;只有当两个逻辑变量都为1时,“与”运算结果才为1。例1.22 计算10011101B10111011B。步骤如下:结果:10011101B10111011B10011001B2)“或”运算(OR)“或”运算又称逻辑加,运算符号用“OR”、“”或“”表示,其运算规则如下:000011101111 即两个逻辑位进行“或”运算,只要有一位为1,则运算结果就为1;只有当两个逻辑变量都为0时,“或”运算结果才为0。例1.23 计算10011001B10111011B。步骤如下:结果:10011001B10111011B10111011B3)“非”运算(NOT)“非”运算的运算符号是在逻辑变量上方加一横
40、线表示,即对逻辑位求反。其运算规则为按位取反,即1的“非”为0,0的“非”为1。例1.24 求二进制数10010111B的“非”。对10010111按位取反即可,运算结果为01101000B。4)“异或”运算(XOR)“异或”运算的运算符号用“”或“”来表示。其运算规则为:即两个逻辑位进行“异或”运算时,当两个逻辑变量取值相同时,它们“异或”的结果为0;当两个逻辑变量取值不相同时,它们“异或”的结果才为1。例1.25 计算11010011B 10100110B。步骤如下:结果:7.十六进制数的算术运算十六进制数运算的种类和二进制数的相同,并且所有运算都可以转化为二进制数或十进制数进行,经计算后
41、再把所得的结果转换成十六进制数。当然,只要按照逢十六进一的规则,也可以直接用十六进制数来计算。例1.26 计算0B5F0H0A427H。加法过程如下:结果:0B5F0H0A427H15A17H注意:进行十六进制数加法运算时,逢16进1,若两个一位数之和M小于16,则和的相应位为M本身,若两个一位数之和M大于16,则用M16来取代M,同时向高位进1。例1.27 计算0B5F0H0A427H。减法过程如下:结果:0B5F0H0A427H11C9H注意:十六进制数减法运算与十进制数相类似,够减时,直接相减;不够减时,从高位借1(相当于本位的十进制数16)。例1.28 计算07D5H5CH。乘法过程如
42、下:结果:07D5H5CH2D08CH注意:十六进制数乘、除法运算没有十进制数那种“乘法九九口诀表”,通常先化为二进制数比较方便,但也可直接用十进制数的乘法规则来计算,只是结果必须转化成十六进制数来表示。计算机的基本功能是对数据进行运算和加工处理。数据有两类,一种是数值数据,如8.9、2.56等;另一种是非数值数据(信息),如A、&等。不论是哪种数据,在计算机中都必须用二进制代码来编码表示,数值数据的正、负号也用二进制代码表示。1.2 计算机中数与字符的编码计算机中数与字符的编码1.2.1 数值数据的编码及运算1.带符号数的编码及运算规则1)机器数与真值计算机中的数值数据分为带符号数(有符号数
43、)和无符号数(不带符号数)。在算术运算中,数据是有正有负的,称之为带符号数,其最高位表示正、负符号;若数据是非负的,称之为无符号数,其最高位表示数值。在计算机内部表示二进制数的方法通常称为数值编码,由于计算机不能识别正、负号,因此计算机将正、负等符号数码化,以便运算时识别。这种连同正、负号数码化的采用二进制编码形式表示的数,在计算机中统称为机器数或机器码。机器数按一定编码方式所代表的实际数值称为该魇恼嬷(简称真值),通常用、前缀表示数的正、负,用十进制数表示数值的大小。简单地说,把一个数在机器中的表示形式称为机器数,而这个数本身就是该机器数的真值。机器数的含义有以下两点:(1)机器数所能表示的
44、数的范围由计算机的字长来决定。字长确定后,机器数所表示的数值的范围大小被限定。例如,当计算机使用8位寄存器时,其字长为8位,所以一个无符号整数的最大值是:(11111111)B(255)D,此时机器数的范围是0255;当使用16位寄存器时,字长为16位,所以一个无符号整数的最大值是:(1111111111111111)B(65535)D,此时机器数的范围是065535。(2)机器数可以是带符号数,也可以是无符号数。带符号数是指机器数由符号位和数值位两部分组成,且都用二进制代码表示,通常规定其最高位为符号位,用来表示数的正、负号,余下位为数值位,且符号位为0表示正数,符号位为1表示负数。与带符号
45、数对应的是无符号数,无符号数没有符号位,所有位数全部为数值位,因此不能表示负数,只能表示0和正数。使用8位二进制数D7D0表示带符号数,规定D7为符号位,D6D0为数值位。同样对于16位二进制数D15D0,规定D15为符号位,D14D0为数值位。带符号数表示如下:01011011B91,11011011B91上式中等号左边为机器数,等号右边为该机器数的真值。注意:8位带符号数和8位无符号数所能表示的数的范围是不同的,8位带符号正数的最大值是01111111B,相当于十进制数的127;而8位无符号数的最大值是11111111B,相当于十进制数的255。为了简化二进制数值数据的运算,机器数在计算机
46、中有三种常用的编码表示法:原码、反码和补码。它们共同的特点是都通过符号位来表示数的正、负,但数的大小的表示方法是不同的。由于补码编码有许多优点,因此大多数微机数字与字符采用补码进行编码。2)原码表示法对一个二进制数而言,若用最高位为符号位,规定正数的符号位为0,负数的符号位为1,其余数值位部分是其绝对值的二进制形式,则称这种表示方法为该二进制数的原码表示法,这样得到的机器数就是二进制数的原码。一个数X的原码记为X原。例如,X1011100,Y1011100,则X原01011100,Y原11011100。其中X原和Y原分别为X和Y的原码。例1.29 假设某机器为8位机,即一个数据用8位二进制来表
47、示,若X23,Y23,求X原和Y原。因为X230010111B,Y230010111B,根据原码表示法,有原码X原和真值X之间的关系如下:(1)正数的原码表示。设XXn2Xn3X1X0(即n1位二进制正数),则X的原码表示为:X原0Xn2Xn3X1X0X(为n位二进制数,其中最高位为符号位)(2)负数的原码表示。设XXn2Xn3X1X0(即n1位二进制负数),则X的原码表示为:X原1Xn2Xn3X1X02n1Xn2Xn3X1X0 2n1(Xn2Xn3X1X0)2n1X(它也是一个n位二进制数,其中最高位为符号位)(3)零的原码表示。在二进制数原码表示中有正零和负零之分,即真值0的原码可表示为两
48、种不同的形式,0和0。具体表示为:0原000000B,0原100000B(n位二进制数,最高位为符号位)当n8时0原00000000B00H,0原10000000B80H综上所述,若二进制数XXn1Xn2Xn3X1X0,则原码表示的严格定义可用以下数学式表示:(1.2)原码表示法的优点是简单直观,易于理解,且与真值间的转换非常方便,只要将真值中的符号位数字化即可。它的缺点是0有两种表示形式,给使用带来了不便;另外,原码进行加、减运算时较麻烦,在使用原码作两数相加时,计算机必须对两个数的符号是否相同作出判断,当两数符号相同时,则进行加法运算,否则就要作减法运算;而且对于减法运算要比较出两个数的绝
49、对值大小,然后从绝对值大的数中减去绝对值小的数而得其差值,差值的符号取决于绝对值大的数的符号。为了完成这些操作,计算机的结构,特别是控制电路随之复杂化,而且运算速度也变得较低。为此在微机中都不采用原码形式表示数,而引进了反码表示法和补码表示法。原码表示的整数范围是:(2n11)(2n11),其中n为机器字长。则一个字节所表示的8位二进制原码表示的数据范围为127127,16位二进制原码表示的数据范围为3276732767。3)反码表示法反码表示的带符号数,也是把最高位规定为符号位。对于正数,它的反码与其原码相同(最高位为0表示正数,其余数值位是正数的绝对值)。对于负数,其反码用对应正数的原码连
50、同符号位在内按位取反来求得,取反的含义就是将0变为1,将1变为0。也可以认为,负数的反码表示为负数的原码除符号位外其余各数值位按位取反。可见,正数和负数的符号位与原码定义都相同。一个数X的反码记为X反。例1.30 假设某机器为8位机,若X31,Y31,求X反和Y反。因为X310011111B,Y310011111B,则有X原00011111B1FH X反X原00011111B1FHY原10011111B9FHY反11100000B0E0H可见,若X为8位带符号二进制数的真值,则X反X反11111111BFFH。即对于n位带符号二进制数,有X反X反2n1。反码X反和真值X之间的关系如下:(1)正