欢迎来到天天文库
浏览记录
ID:53962540
大小:25.00 KB
页数:5页
时间:2020-04-11
《《闲扯补码》专题.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《闲扯补码》专题路中信息学1、在计算机系统中,数值一律用补码来表示(存储)。主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。2、补码与原码的转换过程几乎是相同的。数值的补码表示也分两种情况:(1)正数的补码:与原码相同。例如,+9的补码是00001001。(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。例:求-7的补码?因为是负数,则符号位为“1”,整个为10000111;其余7
2、位为-7的绝对值+7的原码0000111按位取反为1111000;再加1,所以-7的补码是11111001。已知一个数的补码,求原码的操作分两种情况:(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位不变(为1),其余各位取反,然后再整个数加1。例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001取反后为000011
3、0;再加1,所以是10000111。步骤(2)逆过程求原码:补码为11111001,减1后得11111000,符号位不变(为1),其余各位取反得原码:10000111在“闲扯原码、反码、补码”文件中,没有提到一个很重要的概念“模”。我在这里稍微介绍一下“模”的概念:“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:时钟的计量范围是0~11,模=12。表示n位的计算机计量范围是0~2(n)-1,模=2(n)。【注:n表示指数】“模”实质上是计量器
4、产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6另一种是顺拨8小时:10+8=12+6=6在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。对于计算机,其概念和方法完全一样。
5、n位计算机,设n=8,所能表示的最大数是11111111,若再加1称为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的模为2(8)。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。另外两个概念一的补码(one'scomplement)指的是正数=原码,负数=反码而二的补码(two'scomplement)指的就是通常所指的补码数在计算机中是以二进制形式表示的。数分为有符号数和无符号数。原码
6、、反码、补码都是有符号定点数的表示方法。一个有符号定点数的最高位为符号位,0是正,1是副。以下都以8位整数为例,原码就是这个数本身的二进制形式。例如0000001就是+11000001就是-1正数的反码和补码都是和原码相同。负数的反码是将其原码除符号位之外的各位求反[-3]反=[10000011]反=11111100负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。[-3]补=[10000011]补=11111101一个数和它的补码是可逆的。为什么要设立补码呢?第一是为了能让计算机执行减法:[a-b]补
7、=a补+(-b)补第二个原因是为了统一正0和负0正零:00000000负零:10000000这两个数其实都是0,但他们的原码却有不同的表示。但是他们的补码是一样的,都是00000000特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)[10000000]补=[10000000]反+1=11111111+1=(1)00000000=00000000(最高位溢出了,符号位变成了0)有人会问10000000这个补码表示的哪个数的补码呢?其实这是一个规定,这个数表示的是-128所以n位补码
8、能表示的范围是-2^(n-1)到2^(n-1)-1比n位原码能表示的数多一个又例:1011原码:01011反码:01011//正数时,反码=原码补码:01011//正数时,补码=原码-1011原码:11011反码:10100//负数时,反码为原码取反补码:10101//负数时,补码为原码取反+10.1101原码:0.1101反码:0.1101//正数时,反码=原码补码:0
此文档下载收益归作者所有