- 原码
原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。
我们希望 (+1)和(-1)相加是0,但计算机只能算出0001+1001=1010 (-2)
另外一个问题,这里有一个(+0)和(-0)
为了解决“正负相加等于0”的问题,在“原码”的基础上,人们发明了“反码”
- 反码
机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。
“反码”表示方式是用来处理负数的,符号位置不变,其余位置相反
当“原码”变成“反码”时,完美的解决了“正负相加等于0”的问题过去的(+1)和(-1)相加,变成了0001+1110=1111,刚好反码表示方式中,1111象征-0人们总是进益求精,历史遗留下来的问题—— 有两个零存在,+0 和 -0我们希望只有一个0,所以发明了"补码".
- 补码
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。
我们要处理"反码"中的"-0",当1111再补上一个1之后,变成了10000,丢掉最高位就是0000,刚好和左边正数的0,完美融合掉了这样就解决了+0和-0同时存在的问题另外"正负数相加等于0"的问题,同样得到满足举例,3和(-3)相加,0011 + 1101 =10000,丢掉最高位,就是0000(0)同样有失必有得,我们失去了(-0) , 收获了(-8)
为什么integer是-128 - 127 晓得了不 8位数
结论:保存正负数,不断改进方案后,选择了最好的"补码"方案
总结: 计算机里面,只有加法器,没有减法器,所有的减法运算,都必须用加法进行。
用补码代替原数,可把减法转变为加法。出现的进位就是模,此时的进位,就应该忽略不计。
二进制整数最终都是以补码形式出现的。正数的原码、补码、反码都是一样的。负数的补码是反码加一的结果。这样减法可以使用加法器实现,符号位也可以参与运算。