多年前我写的一篇文章说补码的原理的,神奇的消失了。不知道到底是写在哪里去了。如同我日渐衰退的大脑和记忆一样。
人的消亡,不只是肉体慢慢衰退,精神和意识也同样。可悲。
写那篇文章的时候,CSDN上还没有确切讲清楚补码原理的。
不过如今大把都是。就不再重复了。
就提几个关键吧。
1 计算机用补码方便二进制计算。因为补码可以直接相加而结果不会出错。源码和反码则不能直接相加。
2 补码之所以叫补码,和直角中30度的补角是60度一样,1和255是对256是互补的。255的原码就是-1的补码。同样,1和127对128是互补的,如果忽略符号位,-1的补码就是127的原码。
3 对于8位无符号二进制来说,范围是0~255,而对于有符号数来讲,范围是-128~127。前面的0~127二者是一致的 但从128开始,用无符号数的128标识有符号数的-128直到,129表示-127……以此例推,直到用255表示-1。就是说,用无符号数的后半段来表示有符号数的负数。在补码中,数字大小的增减和绝对值大小增减方向一致,所以可以直接相加。
4 根据2和3的原理,有如下公式,
-45的补码=256-45=211的原码
如果忽略符号位
-45的补码=128-45=83的原码
5 那为什么一个数按位取反之后+1就是补码了呢?也就是反码+1就是补码了呢?看公式:
因为256或者128都是这样的一种数,最高位是1,剩下的全是0,这种数减去比它小的数就是按位取反+1。
比如256-45=255+1-45=255-45+1
255是全是1的数,减去任何比它小的数,都是按位取反。最后再+1就是补码了。
补码的原理
![](https://img-home.csdnimg.cn/images/20240711042549.png)