我看过的关于补码的最好解释
前言
计算机的有符号数包括三种方法,即原码、反码和补码。其中计算机系统当中,数值一律用补码来表示。看了很多关于补码的博客,感觉都不是特别清楚,所以自己写一写个人的见解,有错误还请大家批评指正。
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
5.最后添上负号知表示的十进制为-127。
2 总结
补码关键在负整数的转换比较难以理解,这里用一张图片来理清一下思路。