下面是了解原码补码反码之后做出的小小的总结:
原码的出现是为了计算机更加容易的进行数据之间的计算而出现的以二进制形式表现的编码方式。其以八位数表示,为了计算机计算更加简单,将编码的第一位定义为符号位,0为正,1为负。编码首位以符号表示的便捷之处就在于将其之间的加减法化为了单单的加法。比如十进制数1=原码0000 0001,二进制数-1=十进制数1000 0001.。1-1=1+(-1)。由此也可知原码所表示是金属的范围:[11111111]~[01111111]即-127~127.
但是随之出现了一些问题:十进制中,1+(-1)=0,然而在二进制编码中:1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2.很明显,结果是不正确的。所以后来就有了反码的出现:
反码的表示方法是:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.。
比如:1= [00000001]原 = [00000001]反,,,-1= [10000001]原 = [11111110]反。
1+(-1)=[0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0。虽然我们知道0和-0没区别,但是带上一个负号是没有任何意义的,所以反码只能得到一部分正确答案。于是就有了补码的出现:
补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
比如:1= [00000001]原 = [00000001]反 = [00000001]补,,-1 = [10000001]原 = [11111110]反 = [11111111]补。
1+(-1)=[0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原=0;可见答案是正确的。