在计算机中,并不存在原码反码。
在计算机中,只用补码表示带符号数。
使用了补码,就可以用加法,代替减法运算,从而简化计算机硬件。
------
理解补码,要先从补数开始。
时针转一圈,周期是 12 小时。
倒拨 3 小时,就可以用正拨 9 小时代替。
9 就是-3 的补数。 9 = 12-3。
同理,倒拨分针 X 分,就可以用正拨“60-X”代替。
60 是分针的周期。
------
对于两位十进制 0~99,周期就是一百。
这时,减一,你就可以用 +99 代替。
25 - 1 = 24
25 + 99 = (1) 24
结果取两位,舍弃进位。这两种算法,功能就是相同的。
99,就称为-1 的补数。
98,就是-2 的补数。
。。。
利用补数,就可以用加法,代替减法运算。
补数怎么求?
正数,不需要求补数。
负数的补数 = 周期 + 该负数。
------
计算机使用二进制,补数,就改称:补码。
八位二进制,共有 256 个数字。负数的补码 = 256+该负数。
16 位二进制,共有 2^16 个数字。负数的补码 = 65536+ 该负数。
正数,不需要做变换。或者说,正数本身就是补码。
在八位时:
-1 的补码是:256-1 = 255 = 1111 1111(二进制)。
-2 的补码是:254 = 1111 1110。
-3 的补码是:253 = 1111 1101。
。。。
-128 补码:128 = 1000 0000。
------
有了补码,计算机仅需要一个加法器,即可够用。
而原码和反码,不具备这种能力。
所以,在计算机中,并没有原码和反码。
原码和反码,究竟是多少,就不必关心了。
计算机内部,用的是二进制,称为机器数。
这些机器数,可以代表:数字、字符、汉字、声音、图像。。。
八位二进制:称为一个字节。
数值范围是:0000 0000 ~ 1111 1111。
对应十进制:0 ~ 255,共有 256 个。
作为数字使用,它们都是正数,就是 0~ 255。
但是,正数,也可以“当做负数”来使用的。
你看 2 位 10 进制数:
25 - 1 = 24
25 + 99 = (一百) 24
略去进位,保留 2 位数,+99 就能当做-1 使用。
用正数,不仅可以代替负数,顺便,还消除了减法运算。
在计算机中采用这种算法之后,只需用一个加法器,便可走遍天下。
那么,只要你略去进位,255 = 1111 1111 就能代替-1 使用了。
同理,254 = 1111 1110,就能当做-2 了。
。。。
就是说,舍去进位,128~255,就都相当于负数:-128~-1。
128~255,就是:负数的补码。
如果,你保留进位,128~255,就还都是正数。
即:二进制机器数,是不是补码,完全取决于你算法。
二进制的补码,与原码反码毫无关系。
“取反加一符号位不变”的说法,都是瞎说。并没有什么根据。