首页 理论教育 什么是原码、反码、补码?

什么是原码、反码、补码?

时间:2023-06-28 理论教育 版权反馈
【摘要】:虽然用原码表示一个数简单、直观、方便,但不能用它对两个同号数相减或两个异号数相加。反码正数的反码和原码相同,负数的反码是对该数的原码除符号位外各位取反,即“0”变“1”,“1”变“0”。不难发现一个规律:回拨2小时=前拨10小时回拨4小时=前拨8小时回拨5小时=前拨7小时因为2和10相加正好等于模数12,所以称10是-2对模12的补数,也称为补码。因为4位二进制数的进位基数是16,所以1010恰好是0110对模16的补码。

什么是原码、反码、补码?

(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

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈