计算机专业的同学应该学过原码,反码和补码但有时是不是还是有点迷惑呢?特别是补码,有的同学可能依稀记得补码是用来处理加减法的,计算机中的整数都用补码表示等等下面我们简单再回顾回顾,如果你觉得对你理解或记忆补码有帮忙,欢迎大家分享一下,我来为大家科普一下关于最简单的补码方法?以下内容希望对你有帮助!

最简单的补码方法(简单谈谈补码)

最简单的补码方法

计算机专业的同学应该学过原码,反码和补码。但有时是不是还是有点迷惑呢?特别是补码,有的同学可能依稀记得补码是用来处理加减法的,计算机中的整数都用补码表示等等。下面我们简单再回顾回顾,如果你觉得对你理解或记忆补码有帮忙,欢迎大家分享一下。

为了方便描述,我们先以单字节,八位二进制为例(高位符号位,其余为数据位)

正数的原码,反码,补码一样;负数的原码数据位与其对应的正数一样,符号位为负(注意这里我们特意说符号位为负,而不是1);负数的反码数据位与其对应的正数的数据位取反,符号位为负;负数的补码数据位为对应的正数数据位取反再加1,比如6用二进制表示原码反码补码都是00000110,而-6的原码是10000110,反码是11111001,补码是11111010。

谈补码前我们先看看反码,大家会注意到,负数的反码恰好每一位都跟正数的反码相反(包括符号位),那6和-6的反码相加,就恰恰得到是11111111,也就是相反的数反码相加就是全1,而数学中,相反数的和应该为零,全1的系列,再加上1,抛弃溢出的,正好是全0。我们把这最后一个1,放到负数的编码中去,就形成了补码,所以相反数的被码相回,最后就是0了。不知道这样描述是不是好理解一下,为什么负数的补码要是反码加1。

上面描述的相反数,对于任意的整数,补码相加还是被码,不用判断符号。接下来说说位数的问题,我们可以理解0110,00110,000110,0000110应该都是一个意思吧,表示正6,那么对于负数补码1010,11010,111010,1111010也应该看作是一样的,都表示-6,所以在处理位数不样的补码相加时,补到一样就行了(补符号位)。

为了进一步加深印象,我们再来看看十进制,我们同样定义十进制的原码,反码,补码,一样,我们高位表示符号位,二进制中正号用0表示,负号用1表示,在十进制中,我们就是用0和9了,为什么这样,讲完下面大家自己理解,同样,取反时0对9,1对8,2对7等等。就不细说了,直接来讲讲45 (-123)我们怎么用补码来解算。

45的补码为045,-123的补码为9877, 对齐0045 9877=9922,-78的补码正好是9922哦。

再看看111-11,111的补码是0111,-11的补码是989,0111 9989=10100,注意了,这里要注意两个地方,一是989至少要对齐到四位跟0111一样,补的是符号位9,然后最终结果是五位,要截到四位,就是0100,也就是100啦。假设我们对齐八位呢,就是00000111 99999989=100000100,同样,截到八位,就是00000100,还是100。

现在是不是对补码有点感觉了呢?是不是感觉这么算十进制加减法没什么用似的,仔细想想,可能有一天你就会发现他有用呢!如果你觉得这篇文章对你有帮助,点个赞呗,顺便分享一下!

,