原码反码补码顶级理解

当学习反码时,你是否会有疑问为什么偏偏要取反加1,为什么这样就可以进行计算。
翻阅很多资料,无非冗长或难度超标,在笔者的不懈钻研之下,研究出了一种只要几分钟看完便可理解,马上记住的理解方式。此方法无需太多例如模的知识,且简单。

出现原因:

计算机只会做加法。遇到负数不知道如何是好,于是聪明人就想出了这样的减法变成加法办法。

首先我们要理解这种办法的理论依据

理论依据

我们首先要知道,计算机存储数位是有限的,也就是说,这个计量系统是有计数范围的。这就好比一个钟表,只能装1-12点钟。
当超过位数时,会溢出。当加上要产生溢出的最小量,存储的这个数大小不会变。我知道你还不理解这句话,别着急,看下面这个例子就可以理解了。
此处为了便于理解溢出如何帮助减法变成加法,用十进制为例子。假定有一个十进制的两位计数容器,即这个容器只能装0至99,那么这个容器产生溢出的最小量就是100。21-12,加上产生溢出的最小量,大小不变,那么我们给这个负数-12加上100不就让-12变成一个正数了吗。21-12+100=21+88=109, 由于只能存两位数,那么此时结果你会惊异发现得到了9。

理论依据的原因:

**当加上要产生溢出的最小量,存储的这个数大小不会变(因此我们可以通过把负数加上最小溢出量来变成正数。这样计算结果不会改变)**这句话的原理就是像上面这个例子一样,这个容器装不下,因此一定会扔掉最高位,就是上面例子中的最高位的1,就是我所说的要产生溢出的最小量。

解决办法:

例如3-2,
计算机存储数位是有限的,在此以长度为一个字节为例。
0000 0011减0000 0010.
负数-0000 0010按照上面的想法应该变成一个正数,这个正数就是用-0000 0010加1 0000 0000,所以为了计算,在计算机中的负数其实是以这种方便计算的数来存储的(也就是所谓补码)。也就是说这个正数(-0000 0010加1 0000 0000)在计算机的视角下,就是代表负三。那么作为人类,我们如何能知道这个补码是啥嘞。有没有什么简便算法嘞。这就是反码的由来。
我们可以把这个正数(-0000 0010加1 0000 0000)记为a。那么移项可以得到,a+0000 0010=1 0000 0000,
由反码思想启发,我们先求a-1,把a-1记作b。
由于a+0000 0010=1 0000 0000,所以b+0000 0010=1111 1111,想要得到这个结果,b的每位应该如何变化呢。最后一位,什么加0等于1呢,当然是1,倒数第二位,什么加1等于1呢,当然是0.也就是说,当我们逐个位来计算,遇到0总是结果等于1,遇到1结果总是0。所以我们只要把原来这个负数-0000 0010的绝对值的每一位1变成0,0变成1那么就得到了b,也就是所谓的反码
于是我们得到了b=1111 1101,a=b+1=1111 1110,此时0000 0011加1111 1110,得到1 0000 0001,最高位1溢出,被丢弃,因此得到的就是0000 0001,也就是1.我们发现3-2也确实结果是1.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值