补码如何代替减法运算以及补码的范围为何是-128到+127

本文详细介绍了8位二进制补码表示下的减法规则,通过图形化的方式展示了补码如何实现减法操作。通过-125和1进行减法的例子,解释了补码的计算过程,包括找到负数的补码、无符号加法和再次取补。同时,阐述了为什么8位二进制补码的范围是-128到+127,以及补码设计的原因,确保了数值递增方向的一致性。
摘要由CSDN通过智能技术生成

                                  图1

该图是根据无符号8位二进制数值递增规律绘制

                                   图2

该图是以模为256的原码递增的规律绘制的

 

首先假如我们遇到了一个减法的运算,比如1-125,那么我们需要将负数-125的补码求出,其补码为-3,二进制表示为10000011,我们将00000001与10000011进行二进制的加法,求出其结果为10000100,但是还没完,现在的结果是最终结果的补码,我们还需要将结果再进行一次补码的操作,得出,其结果为11111100,化为十进制就是252,从上图我们也能看出,如果要从1变为-124,那么有两种选择,一种是逆时针移动4,要么就是顺时针移动256-4=252,将252转换为带符号数就是-124。所以我们认为补码如果从图像上表示的话,可以认为是一段距离,可以使得从一个点以另一种方式移动到另一个点。

我们都知道补码的转换方式,也就是原码取反加1,那么取反加1的操作的本质是什么,我们结合上面的图像来看,我们根据补码的公式知道无论是+0还是-0,它的补码都是全0,那么当我们执行取反加1之后上述图表中0的位置并不会发生变化,但是两个编码却代表同一个数未免太浪费了,于是人为地将-0的补码对应的值改为-128,但是这个修改也不是乱改的。我们还知道正数的补码就是它本身,所以上图的右边部分也是不会变化的。但是左边的部分,会出现比较大的变化,因为它进行了取反并加1的操作,这就导致数值的递增呈现出如下图的效果:

                                    图3

我们将取反加1前的数值递增图和取反加1后的数值递增图进行比较:

                              图5                                                             图6

 左边是变化前的,右边是变化后的,可以清楚的发现当我们进行了取反加1的操作之后,左边数值递增的方向从逆时针变为与右半部分相同的递增方向,均为顺时针。我们可以理解为每当我们进行路取补的操作之后,左半部分的半圆就垂直向里旋转180度,从而达到递增顺序的改变。

还是上面的例子,比如1-125,我们想要完成这个减法操作,那么就需要求出-125的补码,也就是10000011,无符号十进制表示为131。如果我们直接将原码与补码进行二进制数的相加,最终的结果为132,我们根据图1可以知道132对应的点映射到图6中(也就是取补码后的图上)的话,应该是在左下角,在-128靠左的位置,我们称该点为A点。我们根据计算1-125,得出其结果为-124,而这个-124的对应的位置我们根据观察,是与A点是重合的。为什么呢?我们来看1-125这个式子,1-125我们其实也可以这么理解,以1为起点逆时针移动125,而1加上-125的补码也就是00000001+10000011可以理解为从1对应的位置为起点,向前移动131,而这两个动作的效果都是一样的,最终的目的点会进行重合。但是这毕竟是取补后的,我们还需要再次取补将左半部分的递增顺序改变为逆时针,这样的话才是最终的结果。于是我们将左半部分再次向里选择180度,那么根据图5去观察,点的位置就变为了左上部分,距离+0靠左距离为4的地方,我们称该点为B点,那么在图5中,从1以顺时针方向到达B点就需要移动251,也就是说以1为起点,如果要移动到-124对应的点上的话,需要顺时针移动251。目的点对应的值为252。将252转换为带符号数就是-124,与1-125=-124得到的结果相同.

简单来说,用补码代替减法有三步:

1、找到对应负数的补码

2、将加数与补码进行无符号二进制数的加法运算

3、将上述结果进行取补操作即可

 

 为什么8位二进制补码的范围是-128---+127

我们都知道8位二进制的原码的范围是-127-->-0  +0-->+127,总共是256个数,原码的+0和-0是不一样的,+0与-0的反码也是不一样的,但是偏偏补码的+0与-0是一样的,当然还有其他原因,于是就把-0的补码 作为-128。同时我们可以从图6看出,当我们将-0补码作为-128,其他均进行取反加1 的操作之后,数值的递增方向就全部都变为顺时针了,这样就与模运算的递增方向一致了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mllllk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值