我看过的关于补码的最好解释

前言

计算机的有符号数包括三种方法,即原码、反码和补码。其中计算机系统当中,数值一律用补码来表示。看了很多关于补码的博客,感觉都不是特别清楚,所以自己写一写个人的见解,有错误还请大家批评指正。

1 补码的表示

我们先来看一下补码的表示

十进制转化为二进制:

正整数:跟原码一样,普通的十进制转化为二进制(方法是除2取余直到最后的商为0,余数倒序排序)

:全是0

负整数:先求该负数绝对值的补码,然后所有位取反,末位加1,不够位数时左边补1。

二进制转化为十进制

首先应判断是正整数还是负整数还是零。

判断的依据

①如果二进制首位是1,那么表示的是负整数;

②如果二进制首位是0,但有不为0的位,那么表示的是正整数;(一般来说二进制位数位数不足,前面各位补0,比如二进制表示23(总共4字节32个位),那么补零后的表示为00000000000000000000000000000023);

③如果二进制各位都是0,那么表示的是零。

转化的规则

①如果二进制判断为零或正整数,那么和普通二进制转化十进制规则一样。
这里就不举例子了。

②如果二进制判断为负整数,那么关键是找到负整数的绝对值,方法是所有位取反,末位加1,得到的结果就是负整数的绝对值(即原码)。
1.比如10000001(前面位数不足省略若干个1)
2.首位是1,那么表示的是负整数。
3.然后取反为01111110。
4.加一为01111111,按普通二进制转化十进制规则为127
 0×28+1×27+1×26+1×25+1×24+1×23+1×22+1×21+1×20=127.\ 0\times2^8+1\times2^7+1\times2^6+1\times2^5+1\times2^4+1\times2^3+1\times2^2+1\times2^1+1\times2^0=127 \,.
5.最后添上负号知表示的十进制为-127。

2 总结

补码关键在负整数的转换比较难以理解,这里用一张图片来理清一下思路。

我看过的关于补码的最好解释