原码:计算机只能识别0和1,使用的是二进制。数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负),这就是机器数的原码了。
下面的例子都假设字长为8个bits。
假如采用原码来计算:
(1) + (1) //原码计算
=(0000 0001) + (0000 0001)
=(0000 0010)
=(2) //结果正确
(1) - (1) //原码计算
=(1) + (-1)
=(0000 0001) + (1000 0001)
=(1000 0010)
=(-2) //结果错误
(1) - (2)//原码计算
=(1) + (-2)
=(0000 0001) + (1000 0010)
=(1000 0011)
=(-3) //结果错误
因为在两个正数的加法运算中是没有问题的。于是就发现问题出现在带符号位的负数身上。
-------------------------------------------------------------------------------------------------------------
反码:对为了解决原码进行减法运算时出现的错误,引入了反码的概念。对原码中除符号位外的其余各位逐位取反就产生了反码。反码的取值空间和原码相同且一一对应。