计算机基础——对补码符号位代入计算的认识

对补码符号位代入计算的认识

大家都知道计算机对数值的存储与计算都是通过补码来进行的,同时符号位可以直接代入计算,最终结果的符号位也是算出来的,今天我就来聊聊为什么补码的符号位可以代入计算,同时计算出来的结果符号位也恰恰是正确答案的符号位。

首先,聊符号位之前,要聊一下进制与数值之间的关系。
同样的n位二进制数,分为有符号数和无符号数。
我们以5位二进制数为例。
先说较为简单的无符号数,表示的范围为0 0000~1 1111,转换为十进制就是0 ~ 31。
如果最高位也即第五位是符号位,正数表示的范围为0 0000~ 01111,转换为十进制为0 ~ 15;负数表示的范围为1 1111~ 1 0000,转换为十进制为 -15 ~-0。

这里我们将这两种坐标都标在一个圆上。

在这里插入图片描述
这里,我们可以注意到,两种方式表示的每个数都可以在圆上存在对应的刻度。

下面,我们来考虑计算:
以9-12=-3为例,
9的二进制补码为0 1001
-12的二进制补码为1 0100
计算
0 1001
1 0100
1 1101
结果为1 1101,符号为1,表示为负数,我们转换后得到结果为-3。

这里有个问题,为什么我们规定了补码的形式后,明明符号位是我们直接给定的,可是补码的符号位加入了计算,得到的补码真的是结果的补码,为什么?

这里给出一种视角。
定义以下几条规则:

  1. 每个数字代表其在圆圈上的位置
  2. 加看做顺时针运动;减,看做逆时针运动
  3. 加、减的数字,看做是在圆圈上运动相应的距离

还记得我们在圆圈标记刻度时,图上有两种刻度,一种是无符号数的刻度,一种是有符号数的刻度。

对于9-12,可以理解为在圆上刻度为9的地方开始,
逆时针移动12单位的距离。

逆时针移动12单位,相当于顺时针移动20单位。

对于9-12也可以理解为9+20,即在圆上刻度为9的地方开始,顺时针移动20单位的距离。

对于9-12定义的运动来说,最终停下来的位置必然和9+20定义的运动停下来的位置相同。如果参考坐标相同的话,那么刻度对应的数值也必然相等。

有人可能会问,这又什么意义呢?

我们再看9+20的计算过程
9的原码为0 1001
20的原码为1 0100
计算过程为:
0 1001
1 0100
1 1101
答案为1 1101,转化为十进制为29,在有符号数的参考坐标下对应数值为-3。等于运算结果。


观察两个计算过程,我们会发现计算过程完全相同,得到的答案也完全相同。我们观察两个参考坐标系,会发现,正数的二进制码在两种坐标系下完全相同,表现在实际中就是正数的原码与补码相同;而对于负数,其在有符号数参考坐标下的补码恰恰是对应位置在无符号参考坐标下的原码,即如图中所示-12(1 1100)所在的位置在无符号坐标系下的原码为20(1 0100),两者完全相同。

因此,我们可以将数的补码运算看做是切换一种参考坐标系(有符号数->无符号数)后的原码(有符号参考下的补码看做无符号参考下的原码)计算,在该种参考坐标系下符号位也表示数的大小,这时符号位当然必须参与运算,运算后的结果我们再通过对应关系(补码->原码)将其转换到我们计算所在的参考坐标系(无符号数->有符号数)下,得到结果。而转换后的二进制码的最高位决定了数的正负,而不再表示数值的大小。

posted @ 2021-01-22 00:02  Thomas_chen  阅读(112)  评论(0编辑  收藏  举报