简简单单理解原码、反码和补码 (2)

大学的课本,或者网上算补码的方式,都是说正数的原码,反码,补码一致,负数的补码等于反码加1,雅思考试时间为什么负数的补码是等于反码加1呢?我们慢慢来推导。

通过上边的钟表我们可以通过顺时针走多少格来计算负数的补码,但是对于位数非常多的二级制,比如32位,64位,我们不可能通过画类似的时钟来算补码,所以我们就得有个公式能够非常方便的计算出补码,这时候反码就应运而生了。

我们从上边计算补码的公式中知道,对于负数的补码

[y]补 = [y]原 + 模 (y<0)

以上边的4位2进制来解释这个公式

[1010(-2)]原 = [1110(14)]补 = [1010(-2)]原 + [16]模

同时我们知道模就是溢出,所以 [ 模 = 1111 + 1 ] 于是上边的公式就转为

[1010(-2)]原 = [1110(14)]补 = [1010(-2)]原 + [16]模 = [1010(-2)]原 + 1111 + 1

综上,我们把 [1010(-2)]原 + 1111 称为反码,因为要计算一个数与另一个数的结果为1111是非常容易的,只需符合位不变,其余求反即可,1010 -> 1101。再通过上边的推导公式,将反码加1就得到了补码,1101+1->1110。通过上边的推导我们知道了为什么补码是等于反码加1。

其实还有另个更快的计算补码的小窍门,对于负数的原码,保留原码的符号位,然后从右往左开始,直到遇到1之前都保持不变(包括遇到的第一个1),其余取反,如下,[]框起来的是不变的,加粗是取反的

1010 -> [1]  1  [10] ->1110 
11010000 -> [1]  01  [10000] ->10110000

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgdgwx.html