(1)原码
正数的符号位用0表示,负数的符号位用1表示,数值部分用二进制形式表示,称为该数的原码。
比如:X=+82,则(X)原=01010010;Y=-82,则(Y)原=11010010。
虽然用原码表示一个数简单、直观、方便,但不能用它对两个同号数相减或两个异号数相加。
比如:将十进制数“+36”与“-45”的原码直接相加:
而将(00100100)2即(+36)10 与(10101101)2即(-45)10相加得到(11010001)2即(-81)10,这显然是不对的。
(2)反码
正数的反码和原码相同,负数的反码是对该数的原码除符号位外各位取反,即“0”变“1”,“1”变“0”。
例如:X=+81,Y=-81。
(X)原=01010001,(X)反=01010001
(Y)原=11010001,(Y)反=10101110
(3)补码
在做减法运算时,如果两个数是用原码表示的,直接运算显然是有问题的,那么如何才能解决这个问题呢?可以这样首先比较两数绝对值的大小,然后以绝对值大的一个作为被减数、绝对值小的一个作为减数,求出差值,并以绝对值大的一个数的符号作为差值的符号。不难看出,这个操作过程比较麻烦,而且需要使用数值比较电路和减法运算电路。如果能用两数的补码相加代替上述的减法运算,那样运算器的电路结构就可以大为简化。(www.xing528.com)
为了说明补码运算的原理,同学们可以联想到生活中用到的钟表,如果将钟表想象成是一个1位的12进制数。如果当前时间是6点,希望将时间设置成4点,需要怎么做呢?
① 往回拨2个小时:6-2=4
② 往前拨10个小时:(6+10)mod 12=4
③ 往前拨10+12=22个小时:(6+22)mod 12=4
②,③方法中的mod是指取模操作,16 mod 12=4 即用16除以12后的余数是4,即超出12以后的“进位”将自动消失。所以钟表往回拨(减法)的结果可以用往前拨(加法)替代。不难发现一个规律:
回拨2小时=前拨10小时
回拨4小时=前拨8小时
回拨5小时=前拨7小时
因为2和10相加正好等于模数12,所以称10是-2对模12的补数,也称为补码。接下来回到二进制数的运算中比如:1010-0110=0100(10-6=4)的减法运算,在舍弃进位的条件下,可以用1010+1010=0100(10+10-16=4)的加法运算代替。因为4位二进制数的进位基数是16(10000),所以1010(10)恰好是0110(6)对模16的补码。因此正数的补码与原码相同,负数的补码是对该数的原码除符号外各位取反,然后加1,即反码加1。
比如:X=+83,(X)原=(X)反=(X)补=01010011
Y=-83,(Y)原=11010011,(Y)反=10101100,(Y)补=10101101
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。