为什么负数要以补码形式存储
补码的功能类似于:时针倒拨 3 小时,与正拨 9 小时,效果相同。
那么,计算机中的负数,也可以改为正数(即补码)。
同时,减法运算,也就可以用加法运算代替了。
于是,借助于补码,就统一了加减法,就能够简化计算机的硬件。
十进制比较容易理解:
25 - 1 = 24
25 + 99 = (一百) 24。
只要忽略进位,+99 就能代替-1。
+99 就称为-1 的补数。
在这里用了 2 位 10 进制。
求补数的算法:补数 = 负数 + 10^n。
n 是位数。
-----------------------
计算机用二进制,补数,就改名为:补码。
一个字节,是 8 位 2 进制。
计数范围是:0000 0000 ~ 1111 1111(十进制 255)。
计数周期是:2^8 = 256。
求补码的算法:负数的补码=负数+2^n。
那么:
-1 的补码=-1 + 256 = 255 = 1111 1111。
-2 的补码=-2 + 256 = 254 = 1111 1110。
。。。
例如,7-2 = 5,用补码计算如下:
7 = 0000 0111
[-2] 补 = 1111 1110
---相加------------
得: (1) 0000 0101 = 5
舍弃进位,结果就完全正确。
借助于补码,计算机中,就不存在负数了,从而就把减法转换为加法运算。
-----------------------
补码的来源,与原码反码毫无关系。
“取反加一、符号位也能参加运算”,这些,都没有什么理论依据。
通过原码反码,已经证明“符号位能参加运算”是错误的。
补码,它就是一个正数,什么符号位也没有。
补码的全部位,都是代表数据的,当然就都可以参加运算。