补码是用来解决负数在计算机中的表示问题的。正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)。
例:1-1 = 1+(-1) = 00000001(原码) + 100000001(原码) =00000001(反码) +11111110(反码) = 11111111(反码)=10000000(原码) = -0
用反码运算时,结果为-0,虽然+0和-0都是0,但是看起来总是觉得怪怪的,何况0带符号没有任何意义,并且出现了两个能表示0的二进制数00000000和10000000。
这让严谨的程序员们如何能接受,为了消除歧义,于是出现了反码。
扩展资料
补码这个编码方案要解决的是如何在机器中表示负数,其本质意义为用一个正数来表示这个正数对应的负数。所谓-20的补码是指:如何在机器中用补码形式表示-20。
具体过程是这样的:将20的二进制形式直接写出00010100,然后所有位取反变成11101011,再加1变成了11101100。最简单的补码转换方式,不必去理会转换过程中的符号位,只关注转换前和最终转换后的符号位就行。
补码的总前提是机器数,不要忘了机器数的符号位含义,最高位为0表示正数,最高位为1表示负数,而最高位是指机器字长的最左边一位。字节数100B,最高位为00000100中的最左边的0。
参考资料来源:百度百科-补码
补码是怎么回事? 这得从“补数”谈起。
计算机所能计算的位数,是固定的,如八位机、16 位。。。
位数限定之后,就可以用“补数”代替负数,用加法实现减法运算。
如限定两位十进制,-1,就可以用 +99 代替。
25 - 1 = 24
25 + 99 = (一百) 24
舍弃进位,只取两位,这两种算法功能就完全相同。
99,就是-1 的补数。 计算公式:补数 = 一百+负数。
一百,是用两位十进制,循环计数的周期。
这个周期,在计算机专业,又称为“模”。
-------------------------
计算机用二进制,补数,就改称为:补码。
八位二进制:0000 0000~1111 1111 (十进制 255)。
循环计数的周期,是:2^8 = 256。
求负数补码的计算公式,也是: 周期 + 负数。
-1 补码就是:256 + (-1) = 255 = 1111 1111(二进制)。
用不存在的“原码反码取反加一”来求,也是这个结果。
正数,不用转换,直接参加运算。所以,正数自身就是补码。
-------------------------
举例说明,如: 5 - 7 = -2。
用八位补码计算的过程如下:
5 的补码=0000 0101
-7的补码=1111 1001
--相加-------------
得 (1) 1111 1110 = -2 的补码
舍弃进位,只保留八位,这就用加法,实现了 5-7。