使用二进制补码表示二进制负数方法合理性的证明
目录
二进制补码的定义
对k位的二进制数M的十进制值,我们可以表示为1
M=ak−12k−1+ak−22k−2+...+a121+a020
M
=
a
k
−
1
2
k
−
1
+
a
k
−
2
2
k
−
2
+
.
.
.
+
a
1
2
1
+
a
0
2
0
其中
ai=0或1
a
i
=
0
或
1
或采取更为紧凑的形式
M=∑i=0k−1ai2i
M
=
∑
i
=
0
k
−
1
a
i
2
i
则我们把 补码定义为
M补=2k−M
M
补
=
2
k
−
M
而原来的M称为 原码
补码与反码的关系
定义二进制数M的反码:
M反=∑i=0k−1Ai2i
M
反
=
∑
i
=
0
k
−
1
A
i
2
i
其中 2
Ai={0,1,ai=1ai=0
A
i
=
{
0
,
a
i
=
1
1
,
a
i
=
0
事实上,反码即为原码所有位数上 0 变成 1 ,1 变成 0 。
这里有一个显然的性质:原码加反码得数所有k个数位上全是1;若此时往原码加反码的得数上加 1 ,则刚好进到 2k 2 k 上。于是我们得到公式
M+M反+1=2k
M
+
M
反
+
1
=
2
k
自然得到一下定理:
定理 1
补码等于反码加一
证:因为
M+M补=2k M + M 补 = 2 k
M+M反+1=2k M + M 反 + 1 = 2 k
显然M补=M反+1 M 补 = M 反 + 1
计算机中二进制负数
现在讨论计算机中二进制负数的储存。我们给出以下定理
定理2
在k位储存系统中,可以用负数绝对值的补码代替负数,使其在满足k位储存系统中的加法规律。
证:利用定理一
设我们需要储存正数M的负值:- M
M+M反+1=2k M + M 反 + 1 = 2 k
然而第 2k 2 k 位(即第 k+1 位)不能被储存,剩下M+M反+1=0 M + M 反 + 1 = 0
所以−M=M反+1 − M = M 反 + 1
因此 M反+1 M 反 + 1 即为M的加法逆(负数)
于是计算机中在小于 2k 2 k 位的内存内(所谓的不“溢出”)我们可以用负数绝对值的补码代替负数。