首先是这三码的区别,对于正数来讲三者没有什么区别,区别在于负数
反码:原码中除去符号位,其他的数值位按位取反,即0变1,1变0
补码:反码+1
示例显而易见的对于正数没有区别。
那么设计这三个码的意义是什么?上面介绍了原码、反码和补码三者的概念,那么,计算机中为什么要设计补码这一概念呢?因为直接用原码涉及到减法操作,这就增加了计算机底层电路涉及的复杂性。而用补码操作时,当减去一个数时,可以看做加上一个负数,然后转变位加上这个负数的补码。即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了,总而言之就是一句话消除减法让计算机运算更加简便。
计算方式:
40-13:
其中 40 的补码为:0010 1000 -13的补码为:1111 0011
因此实际的运算过程就可以直接带符号位进行相加,同时,如果最高位(符号位)有进位,则舍弃。
0010 1000 + 1111 0011 = 1 0001 1011
这里最高符号位的进位可以舍弃,因为8位2进制,能表示的数在-128~127之间。而1 0001 1011 = 283,将283转化到这个范围中即为:
283 % 256 = 27。
其实也相当于 0001 1011. 所以符号位的最高进位可以舍去。