1、第二章 数制与编码,葛晓宇 ,计算机中的数制 无符号二进制数的算术运算和逻辑运算 带符号二进制数的表示及运算 二进制编码 常用术语解释,本章主要内容,本章重点,计算机中的常用计数制、编码及它们相互间的转换 二进制数的算术运算和逻辑运算 带符号二进制数的表示及补码运算 二进制数运算中的溢出问题 基本逻辑门及译码器 例题讲解,2.1 计算机中的数制,数制 是人们利用符号来计数的科学方法。数制可以有很多种,但在计算机的设计和使用上常用的则为十进制、二进制、八进制和十六进制。,数制的基和权 数制所使用的数码的个数称为基,数制每一位所具有的值称为权。,十进制: 基为“10”,权为以10为底的幂, D 二
2、进制: 基为“2”,权为以2为底的幂, B 八进制: 基为“8”,权为以8为底的幂, O 十六进制:基为“16”,权为以16为底的幂 H,十进制数:,二进制数:,数 制 的 转 换,十进制数转换成二进制代码的方法:对于十进制数整数部分采用除2取余法对于十进制数小数部分采用乘2取整法,例1:求十进制数17的二进制代码,例2:求十进制数0.25的二进制代码,习 题,返回,思考:如何完成十进制数向十六进制数的转换?,数 制 的 转 换,例1:求十进制数17的二进制代码,被除数 除数 商 余数,17 2,8 1,8 2,4 0,4 2,2 0,2 2,1 0,1,0,0,0,1,D0,D1,D2,D3
3、,D4,方法总结:对于十进制数整数部分采用除2取余法,直到商为0,例2:求十进制数0.25的二进制代码,被乘数 乘数 积 取整,0.25 2,0.5 0,0.5 2,1.0 1,0,0,1,D-1,D-2,0,D0,方法总结:对于十进制数小数部分采用乘2取整法,直到小数部分为0,数 制 的 转 换,例3:将二进制代码11011.0111转换为十进制数,数 制 的 转 换,例4: 将下面给出的二进制数转换成十六进制的数,注意二进制数转换为十六进制数的方法: 从小数点开始分别向左和向右把整数和小数部分每四位分段,每段分别转换为一位。若整数最高位的一组不足位,则在其左边补零;若小数最低位的一组不足位
4、,则在其右边补零,数 制 的 转 换,(1)11010,(2)110100,1、下列各二进制数相当于十进制数的多少?,答案:26(10),答案:52(10),习 题,返回,2.2 无符号二进制数的运算,返回,算术的四种基本运算:加、减、乘、除,试计算011与010之和,结论:两个二进制数相加是通过逐位相加来实现的。,二进制数的加法运算,返回,推广: 设两个二进制数分别为A=A3A2A1A0,B=B3B2B1B0两数之和为S=S3S2S1S0S0=A0+B0 进位C1S1=A1+B1+C1 进位C2S2=A2+B2+C2 进位C3S3=A3+B3+C3 进位C4A+B=C4S3S2S1S0,二进
5、制数的减法运算,原理:将减数变成补码后,再与被减数相加,其和(如有进位的话,则舍去进位)就是两个数之差。,什么是补码?,补码反码(原码取反),(),是进位,舍去,对二进制数,乘以2相当于左移一位,二进制数的乘法运算,000010110100=00101100B,例:,方法:1 按照十进制的乘法过程2 采用移位加的方法,对二进制数,除以2则相当于右移1位,二进制数的除法运算,000010110100=00000010B即:商=00000010B余数=11B,例:,无符号数的表示范围,0 X 2n-1 若运算结果超出这个范围,则产生溢出。无符号数的溢出判断准则:运算时,当最高位向更高位有进位(或借
6、位)时则产生溢出。,例:,最高位向前有进位,产生溢出,00000000,1,00000001,11111111,+,二进制数的逻辑运算,与或非异或,或 运 算,表/达式:Y = A + B,其可能结果如下:,结论:两者皆伪者则结果必伪,有一为真则结果为真,返回,表达式:Y = A B,其可能结果如下:,结论:两者皆真者则结果必真,有一为伪则结果为伪,与 运 算,非 运 算,这其实也是反向器的性质。所以在电路实现上,反向器是反运算的基本元件,三种基本门电路:,Y=A + B,Y=A B,返回,掌握: 与、或、非门逻辑符号和逻辑关系(真值表)与非门、或非门的应用,其 它 逻 辑 电 路,返回,译码
7、器74LS138译码器,作用:将不同的地址信号转换为对某一芯片的片选信号,要求掌握: 各引脚功能 输入端与输出端关系,使能端,译码输入,译码输出,课外作业:下载并阅读该型号译码器的数据手册。,2.3 带符号二进制数的表示及运算,计算机中的符号数可表示为:符号位+真值机器数“0” 表示正“1” 表示负,例:,+52 = +0110100 = 0 0110100符号位 真值-52 = -0110100 = 1 0110100符号位 真值,1. 符号数的表示:,原码:真值X的原码记为X真,在原码表示法中不论数的正负,数值部分均保持原真值不变。反码:真值X的反码记为X反。正数的反码同原码。负数的反码的
8、数值部分为真值的各位按位取反。补码:真值X的补码记为X补。正数的补码同原码。负数的补码的数值部分为真值的各位按位取反加1。,原码:,最高位为符号位,用“0”表示正,用“1”表示负;其余为真值部分 优点: 真值和其原码表示之间的对应关系简单,容易理解 缺点: 计算机中用原码进行加减运算比较困难,0的表示不唯一,8位数0的原码:+0=0 0000000-0=1 0000000,对一个机器数X: 若X0 ,则 X反=X原 若X0, 则 X反= 对应原码的符号位不变,数值部分按位求反 例:X= -52 = -0110100X原=1 0110100X反=1 1001011,反码,+0反=00000000
9、-0反 =11111111即:数0的反码也不唯一,补码,定义: 若X0, 则X补= X反= X原 若X0, 则X补= X反+1 例:X= 52= 0110100X原=10110100X反=11001011X补= X反+1=11001100,负数三种编码之间的转换关系,0的补码:表示唯一,+0补= +0原=00000000 -0补= -0反+1=11111111+1=1 00000000 对8位字长,进位被舍掉,特殊数10000000,该数在原码中定义为: -0 在反码中定义为: -127 在补码中定义为: -128 对无符号数,(10000000)B=128,带符号数的表示范围:,对8位二进制
10、数: 原码: -127 +127 反码: -127 +127 补码: -128 +127,符号二进制数与十进制的转换,对用补码表示的二进制数转换成十进制:1)求出真值2)进行二十转换,例:,将一个用补码表示的二进制数转换为十进制数X补=0 0101110B 真值为:0101110B正数所以:X=+46 X补=1 1010010B 真值为:-0101110B负数从而有:X=X补补=11010010补=-0101110 =-46,2. 符号数的算术运算,通过引进补码,可将减法运算转换为加法运算即:X+Y补=X补+Y补X-Y补=X+(-Y)补=X补+-Y补,例:,X=-0110100,Y=+1110
11、100,求X+Y=? X原=10110100 X补= X反+1=11001100 Y补= Y原=01110100 所以: X+Y补= X补+ Y补=11001100+01110100=01000000,无论正负,真值不变,3. 符号数运算中的溢出问题,溢出判定准则:两个同符号二进制数相加或异符号数相减时,若最高位进位次高位进位1,则结果产生溢出。,思考:有符号数与无符号数在溢出判定上有何不同?,例:,若:X=01111000, Y=01101001则:X+Y=注意: 次高位向最高位有进位,而最高位向前无进位,产生溢出。(事实上,两正数相加得出负数,结果出错),2.4 二进制编码,BCD码:用二
12、进制编码表示的十进制数 ,计数规律与十进制相同“逢十进一” ASCII码:美国国家标准信息交换码,用七位二进制编码表示128个字符和符号,BCD码,压缩BCD码用4位二进制码表示一位十进制数 扩展BCD码用8位二进制码表示一位十进制数,BCD码与二进制数之间的转换,先转换为十进制数,再转换二进制数;反之亦然 例:(0001 0001 .0010 0101)BCD=11 .25=(1011 .01) B,ASCII码,字符的编码,一般用7位二进制码表示。在需要时可在D7位加校验位。 熟悉0F的ASCII码,ASCII码的校验,奇校验加上校验位后编码中“1”的个数为奇数。例:A的ASCII码是41
13、H(1000001B),以奇校验传送则为C1H(11000001B) 偶校验加上校验位后编码中“1”的个数为偶数。A若以偶校验传送则为41H (01000001B),2.5 计算机中常用术语,bit 1Mb=10241024bit=220bit 1Gb=230bit=1024Mb 1Tb=240bit=1024Gb Byte 1 Byte=8bit,1KB=1024 Byte word:表示字长,有1bit,4bit,8bit等,2. 5 溢出及其判断方法1. 进位与溢出所谓进位,是指运算结果的最高位向更高位的进位,用来判断无符号数运算结果是否超出了计算机所能表示的最大无符号数的范围。溢出是指
14、带符号数的补码运算溢出,用来判断带符号数补码运算结果是否超出了补码所能表示的范围。例如,字长为n位的带符号数,它能表示的补码范围为2n1+2n11,如果运算结果超出此范围,就叫补码溢出,简称溢出。,2. 溢出的判断方法判断溢出的方法很多,常见的有: 通过参加运算的两个数的符号及运算结果的符号进行判断。 单符号位法。该方法通过符号位和数值部分最高位的进位状态来判断结果是否溢出。 双符号位法,又称为变形补码法。它是通过运算结果的两个符号位的状态来判断结果是否溢出。上述三种方法中,第一种方法仅适用于手工运算时对结果是否溢出的判断,其他两种方法在计算机中都有使用。限于篇幅,本节仅通过具体例子对第种方法
15、做简要介绍。,若符号位进位状态用CF来表示,当符号位向前有进位时,CF=1,否则,CF=0;数值部分最高位的进位状态用DF来表示,当该位向前有进位时,DF=1,否则,DF=0。单符号位法就是通过该两位进位状态的异或结果来判断是否溢出的。(2.2.7)若OF=1,说明结果溢出;若OF=0,则结果未溢出。也就是说,当符号位和数值部分最高位同时有进位或同时没有进位时,结果没有溢出,否则,结果溢出。,例2.13 设有两个操作数x=01000100B,y=01001000B,将这两个操作数送运算器做加法运算,试问: 若为无符号数,计算结果是否正确? 若为带符号补码数,计算结果是否溢出?,解, 若为无符号
16、数,由于CF=0,说明结果未超出8位无符号数所能表达的数值范围(0255),计算结果10001100B为无符号数,其真值为140,计算结果正确。 若为带符号数补码,由于=1,结果溢出;这里也可通过参加运算的两个数的符号及运算结果的符号进行判断,由于两操作数均为正数,而结果却为负数,因而结果溢出;+68和+72两数补码之和应为+140的补码,而8位带符号数补码所能表达的数值范围为128+127,结果超出该范围,因此结果是错误的。,例2.14 设有两个操作数x=11101110B,y=11001000B,将这两个操作数送运算器做加法运算,试问: 若为无符号数,计算结果是否正确? 若为带符号补码数,
17、计算结果是否溢出?,例题讲解,例1 : 完成下列各式补码数的运算,并根据结果设置标志位SF、ZF、CF和OF,指出运算结果有效否。,0100,1001 + 1001, 11011110,0110,返回,例题讲解,返回,例2 : 把字符串“PART1:Memory”存放在1100 开始的存储区中,请写出字符串的存储情况。,例题讲解,解:,P A R T 1 : M e m o r y,ASCII码:,50,41,52,54,31,3A,4D,65,6D,6F,72,79,地址:,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,110A,110B
18、,IBM PC 的存储器按字节编址,一个ASCII码占用一个字节,返回,字符:,例3 : 写出十进制数3590的非压缩BCD码和压缩的BCD码, 并分别把它们存入数据区UNPAK和PAKED.,例题讲解,解:,0 0,0 9,0 5,0 3,+ 0,+ 1,+ 2,+ 3,+ 0,+ 1,9 0,3 5,返回,习 题,6、有一个16位的数值0101,0000,0100,0011:,(1)如果它是一个二进制数,和它等值的十进制数是多少?,(2)如果它们是ASCII码字符,则是什么字符?,(3)如果它们是压缩的BCD码,它表示的数是什么?,20547,答:,答:,PC,答:,5043,习 题,1、用降幂法和除法将下列十进制数转换为二进制数和16进制数。,(1) 369,(2) 32767,101110001,1000 0000 0000 0001,8001,171,二进制,答:,16进制,二进制,16进制,答:,习 题,2、将下列二进制数转换为16进制数和十进制数。,(1) 101101,(2) 11111111,十进制,答:,16进制,45,2D,十进制,答:,16进制,255,FF,3、什么叫原码、反码及补码?,答案: 凡是二进制的数都称为原码;原码的各位都取其非值则称为反码;补码则等于反码加1。,习 题,