Ⅱ码制原码、反码与补码第三讲计算机中的数制和码制一、机器数与真值(1)•真值:–实际的数值(包括正负号)叫做真值。–如:+35,-1001110B,-100101B一、机器数与真值(2)•机器数:–机器数:数在计算机中的表示;–在计算机中,数只能用二进制表示,符号也用二进制数位表示;–是存放在寄存器或储存单元中的。–例如:10000111,11001001,01100011二、无符号数与有符号数•无符号数:–全部二进制均代表数值,没有符号位。•有符号数:–用最高位作为符号位,“0”代表“+”,“1”代表“-”;其余数位用作数值位,代表数值。–如:+35化为有符号机器数+35+100011B0100011转换为二进制化成有符号数(00100011)(0000000000100011)8位16位三、有符号数的表示•原码•反码•补码1、原码•真值用二进制表示后,数的数值部分不变,在符号位上用“0”和“1”分别表示数的符号“+”和“-”。•X的原码一般表示为[X]原•如:+1001001-11001000100100111100100x[x]原2、反码•正数的反码:与原码相同;•负数的反码:符号位为“1”,数值位按位取反。•X的反码一般表示为[X]反•如:+1001001-11001000100100110011011x[x]反3、补码•引入补码的目的•引入的思路•补码的求法•补码的作用与效果•几点说明•溢出补码•引入补码的目的•将加、减运算简化为单纯的相加运算,以便于在计算机中实现各种运算。补码•引入的思路(1)•由钟表拨表针的方法得到启示;•例如:把表上的8点钟改为6点钟方法二:顺时针拨10格方法一:反时针拨2格补码•引入的思路(2)•拨针方法小结:8-2=68+10=6•思考:为什么会出现这种现象?计算机中是否也有这种现象?(表盘是圆的,可循环计时。)方法二:顺时针拨10格方法一:反时针拨2格补码•引入的思路(3)•计算机储存一个数也有与钟表相同的特点:循环计数•因此对于计算机,要计算像8-2这样的减法式子,也可以化为加法形式来进行。思考:在计算机中,8-2是否也可以化为8+10?如果不行,那么应化为什么样的式子?补码•引入的思路(4)•不同之处:–表计时的最大数是12–计算机计数的最大数不是12(思考:那么是多少呢?)–我们把这个数称为模–计算机的模与字长有关。8位机的模是28=256……n位模=12模=2n补码•引入的思路(5)•观察钟表拨针的两种方法:8-2=68+10=6我们可以看出,减去一个数a相当于加上(模-a)一样,而在计算机中也有相同情况。•在8位字长的计算机中,减去一个数a相当于加上(28-a)一样。•我们称(28-a)为a的补数,其二进制表示形式称为补码。补码•补码的求法(1)•正数:与原码相同;•负数:“求反加一”例:x=+1001100B,则[x]补=01001100B=[x]原x=-1001100B,则[x]补=10110100Bx=-1001100时,[x]补=28-1001100B=256-1001100B=255-1001100B+1=11111111B-1001100B+1=10110100B111111110100110010110011110110100求反加1补码•补码的求法(2)•对于负数的补码求法,还有另一个更快速的办法:符号位为1,真值中最后一个1以前的各位按位求反,而最后一个1及其后的0保持不变。111111110100110010110011110110100符号位为1按位求反最后一个1及其后的0不变补码•补码的求法(3)•课堂练习1、求出下列各数的补码(8位)(1)–67(2)+1011001B(3)–45101111010101100111010011补码•补码的作用与效果•用补码表示计算机中的数后,加减运算均可统一为加法。例:设x=+0000111,y=+0000100,计算式子:x―y(先算出[x]补=00000111,[-y]补=11111100,x―y=x+(-y))+000000111自然丢失补码运算:00000111[x]补11111100[-y]补[x-y]补手工验算:00001110000100-0000011xyx-y补码•几点补充说明(1)•微机内部,带符号数均用补码表示。•采用补码进行运算后,结果也是补码,欲得真值,需作转换。转换方法0开头:将0换成“+”号,其余数位不变。1开头:1换成“-”号,其余方法1:减1求反方法2:求反加1补码•几点补充说明(2)•如果已知x的补码[x]补,则求[-x]补的方法是:对[x]补连同符号位一起求反加1例:已知[+35]的补码是00100011,则[-35]补=11011101补码•几点补充说明(3)•用补码运算时符号位也参与运算,有符号数与无符号数的运算是兼容的。例:1000011000011010+10100000二进制数相加-12226+-9613426+160看成无符号数看成补码出现问题•错误的结果:110010111001000101011100-0110101-1101111+-53-111++92+1011100-164思考:为什么出现了错误?补码•溢出•刚才出现的问题叫做“溢出”;•溢出的原因:运算结果超出了可表示的有符号数的范围。•溢出只会出现在两个同号数相加或两个异号数相减的情况下。思考:如何判别溢出与正常进位?补码•溢出的判别(1)•方法一:转换为真值,判断是否超出数值表示范围。•方法二:根据最高位的进、借位情况进行判断。–溢出:“有进无出”或“无进有出”–正常:“有进有出”或“无进无出”补码•溢出的判别(2)1001001110101101+/-图c无进有出0001001101101101+/-图d有进无出1001001111101101+/-1001001101001101+/-图a有进有出图b无进无出补码•溢出的判别(3)•课堂练习1、请判断下列8位补码的运算是否会产生溢出?110010011110011110110000011000110100101010101101补码小结真值机器数无符号数有符号数原码反码补码补码的求法由补码求真值的方法已知[x]补,求[-x]补的方法补码的作用溢出END