1,原码:将十进制数值变成二进制数值之后的结果。
加入分配8个字节的内存,则
10的原码为00001010
-9的原码为10001001
其中第一位表示符号,0代表正数,1代表负数,后面7位用二进制数值(从右往左依次为
2
0
,
2
1
,
.
.
.
,
2
6
2^0, 2^1,...,2^6
20,21,...,26)
注意10+(-9)的二进制计算结果为10010011(即-19)
2,反码:将原码中的符号位不变,其它位的0和1互换。
10的反码为01110101 (反码是用来处理负数的)
-9的反码为11110110
此时10+(-9)的二进制计算结果为00000000(即0)
3,补码:将反码加上1
10的补码为01110110 (补码也是用来处理负数的)
-9的补码为11110111
此时10+(-9)的二进制计算结果为00000001(即1)
Note: 反码和补码用来处理负数的,重要的事情说三遍。。。
从上可以看出使用补码完美地实现了整数的减法,反码是一个过渡态,对我们人来说,使用十进制直接加减很直观,对于二进制的机器来说,减法简直抓狂,(ಥ _ ಥ)。。。把负数换成补码形式就完美解决了。
Reference
这位知乎大神的回答幽默风趣:https://www.zhihu.com/question/20159860