计算机中,只有补码,并没有原码和反码。
借助于补码,负数和减法,都可以转化成加法来进行运算。
那么,计算机的硬件,就可以简化了。
因此,在计算机中,只有加法器,并没有减法器。
------------------------
补码是怎么回事? 这得从“补数”谈起。
计算机所能计算的位数,是固定的,如八位机、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。
没什么屌用,就是一种约定,人为定义的东西,就是大家都那么干,你也要那么干。
你可以理解其起鸡码,鸭码,屎码,只要知道那个的作用是进行负数运算就行了。
由于计算机存储的数据一般是有位数限制的,那么两个数相加如果超出位数,那么超出部分就会自动丢失。
补码的形式就是利用了这个特点,方法是,对于正数相加没有特殊的,如果溢出了是正常的,而对于正数加负数这样的运算,算法是不需要考虑参与运算数据的符号,直接两数进行二进制加的动作,结果也无需转换就是预期的,那么就需要将负数以补码形式存在,原理是这样,让一个数加上这个补码形式表现的负数时,由于溢出自动丢失的效果,结果与减去这个负数的绝对值是相同的,这就是补码存放负数的实质,是定点CPU计算方面的特色之一。
你可以实际演算一下,比如用4减去2,和用4加上补码表示的-2得到的结果是一致的。