自己学习的总结
众所周知 1+(-1)=0 这个等式一定成立,但若把这两位数都用二进制数来表示并计算,
00000001(1) + 10000001(-1) = 10000010 (-2)
我们得到的结果并不正确,因为第一个等式一定成立所以必定是转化成二进制计算中出现错误。我们先不急着探究为什么第二个等式是错误的,我们先讨论一个等式 1 + x = 0 ,可得 x= -1 ,将等式转化为二进制表示
00000001 + x = 00000000
由此可得 x= 11111111, 我们发现此时的 x 刚好为 -1 的补码形式, 我们发现当 -1 以补码形式计算时等式才能成立,以源码形式计算时不能成立。 这就是计算机要以补码的形式存储的原因了。 原码是为了二进制换算,补码是为了二进制运算。
这是我们发现要使等式
10000000 + x = 00000000 成立,x = 10000000 , 故我们把10000000 这个数认为是 -128。
我们有上面得到的等式 1 + x = 0 可以得到 -1 的补码,所以我们得到
00000000 - 某个正的二进制数 = 这个数相反数的补码
-》(11111111 + 00000001)-某个正的二进制数 = 这个数相反数的补码
https://www.zhihu.com/question/20159860/answer/390141912 这里有关于 原码 反码 补码 的另一种解释