在计算机系统中,数值,一律采用补码来表示和存储。
补码,并非是什么新发明。
补码的来源,就是简单的加减法。
--------------------
如果,码长是八位,总共可构成 256 组代码。
0,在计算机中的存储格式就是:0000 0000。
+1,你就加上 1,就得:0000 0001。
+2,你就再加一个,得:0000 0010。
。。。依次递增。。。
+127,的存放格式,是:0111 1111。
--------------------
负数,也没有什么新意,也就是逐次减一。
0,刚刚说过的,是:0000 0000。
-1,你就减去 1,就得:1111 1111 (十进制 255)。
-2,你就再减一次,得:1111 1110 (十进制254)。
。。。依次递减。。。
-128,的存放格式,是:1000 0000 (十进制 128)。
不能再减了。 再减,就是 +127 = 0111 1111 了。
以上所说这些,就是补码。
--------------------
由此,你就可以推导出,求补码通用的公式:
X >= 0, [ X ]补 = X; 即 0 和正数不用变
X < 0, [ X ]补 = X + 2^n。 n 是补码的位数
--------------------
例如,求-128 的八位补码:
[-128]补码=-128 + 2^8
= 128 =1000 0000 (二进制)
--------------------
例如:用八位补码计算:5 - 7 =-2。
计算如下:
5 = 0000 0101
[-7]补码 = 1111 1001
--相加-----------
得: (1) 1111 1110 = [-2]补码
进位,不属于八位补码,舍弃后,结果正确。
--------------------
由此可知:
使用了补码,减法,就可以用“加法运算”来实现了。
使用了补码,不但简化了运算,也就能够简化硬件。
原码和反码,都没有这种功能。
所以,计算机,根本就不使用它们。
--------------------
补码的形成,与“原码反码符号位取反加一”,毫无关系。
那些乱七八糟的事,都是数学不好老外,胡编乱造的。
在计算机里面,这些,都是没有用的。
不理会它们,也不会影响你学习和使用计算机。