2021-10-10

标题 以数学思维审视原码,反码和补码

我想说的是,反码在我们计算中几乎没有太大作用,至于为什么这么说呢?反码他存在的意义只是为了负数求补码时作为中介,但是当你学不明白的他们存在的意义之时,它是一层遮住补码的面纱,你会很容易接受反码,然后去求补码,而不愿去思考其中还有什么具体的门道。最近我一心专研补码,感觉有所感悟,请道友指教(这里重点是说我们从数学角度的理解与思路)。反码是怎么得到的?就是书上说的取反,为什么取反,相信你们或多或少,听说那个时钟怎么走怎么走吧?我感觉那就是有点绕远了,我确实也听不懂,他俩有什么联系非要扯一起,我也不清楚。但其实你试着把原码和补码加一下,把反码忽略掉,你会有一股刹那间顿悟的感受,但是细品之后感觉很怪,对也就是3乘以2的7次方,我刚开始也觉得很怪,我的怪感觉依据如下:
在这里插入图片描述
在这里插入图片描述
这俩个操作不就是我们计算所谓的公式?我一开始以为这个a就是溢出来的舍去的1,a应该是2的8次方才合理,但是我们上面不是理论的加了一下原码与补码吗?是3乘以2的7次方,差别在哪里呢?而且为什么要是3乘以2的7次方,有什么含义没有?我见过CSDN博客的文章说是为了解决0有两个反码的问题而在反码上加了个1成了个补码,但其实在计算上这个反码事实上是没有必要存在的,它存在只是为了方便大家去计算补码而存在的中介,但是方便的好像计算机,不是我们。而补码的引进实际上对正数没有意义,而是为了解决计算机用加法解决减法的问题,但是在定义了原码之后,符号位的存在影响了这本简单的一切,所以才会有了补码和反码,为的是保住原码的定义,保住符号位记录正负信息。而我们上面简单数学计算的出错点就是符号位的问题。首先我们要先从正数的原码和负数的原码起步推进(至于正数和正数就不用理了,应该都懂的,没有问题)。3乘以2的七次方是不可以替代(当然这只局限于8位的,当你懂了8位之后,自然其他位数就可以用数学思维去联想了),它不就是2的七次方+2的八次方吗(这里将它说成a),二进制的110000000
在这里插入图片描述
我们不妨把a中的2的7次方提出来,去抵消调负数的原码的符号位。我们在拿他们的原码计算的时候,因为符号位的存在得把它看成一个负数(特别是当我们问起老师的时候,老师直接将他们说加起来,来反问我们,让我们觉得怪怪的,又哑口无言),而从a中提出来2的7次方去抵消一个符号位,让它变成了一个正数,我们可以直接计算。然后就是这两个正数相减,若是原来本身是正数的较大减出来肯定是正数(这里先没搁置 a-2的7次方 的存在),剩余的2乘以2的7次方=2的8次方(a-2的7次方) 成了第九位,我们直接按教材计算这正数的补码和负数的补码的时候会溢出,直接扔了(这是规定,规定好才能用,不然很麻烦,发明补码的人肯定也是清楚的很,一句话,就变成规定的,搞得别人问起时会哑口无言,但看估计你下去能理解),而第八位又是0,正数嘛;若是原来那个本身是正数较小,不就会出现负数了?这里才是3乘以2的7次方妙处的体现了,前面少去2的7次方,现在就是2的8次方,它可以扭转乾坤(加上得到的负数,让它变成正数),这个所谓的正数,符号位早已变成1,是负数的补码,是上面那个我们计算得到的负数的原码的补码(具体为什么你可以想一想,刚刚得到的负数是只是把符号位卸下来的负数原码后面的那几位,所以……),他们相加是等于2的8次方,再加上符号位的2的7次方就是a,最后根据我们教材所说补码换原码嘛,原码的补码的补码就是原码本身。这里完全体现出a的妙取值,第九位没用到,来个规定说溢出,随时让他去掉,随时又可以在需要的时候召唤它来解决可能出现(计算机运行不了的,确切的说“变号“来形容应该更合适一点吧)小减大。至于我们那个负数的补码相加可以相应去推得,百分百溢出(注意结果验证过程中的取值,要符合八位的取值,因为我们这里讨论的是8位的,我也曾拿了个比-128小的结果来反问自己),然后2个3乘以2的7次方(减去溢出外,还剩下2个2的8次方)还会和负数补码的符号位抵消掉2个2的7次方,最后剩下就是俩个负数所代表的值(注意跟上思路是没了符号位代表的数值)相加,然后被2的8次方减掉(同理与上面出现负数的情况),得到就是俩个原本给我们的负数相加,转换后的补码,然后根据教程……变成了原码(似乎就是”正+负”上面两种情况的结合)。当你看懂了,差不多可以总结一下了(当然作为后人的我,这也只是我对设计补码存在思路的猜测),这个计算机要进行运算,”拦路虎”无非就是符号位,而减法的计算无非就是设置一个中界值,例如前面说到的a,就是简单的数学思维计算,道理非就是m=a-(a-m)而已,但是单靠数推会撞墙。具体的思维磨合,你可以多看几遍,通过举例计算……,希望有和你们思维联通的一瞬间。越想我又越觉得有点不妙,似乎这个转换成补码的存在,就是已经在计算减法了,感觉就是帮计算机计算减法(只是数都保留了符合号位的而已),计算机从头到尾只会加(所谓“加“还是依靠复杂的电路实现的),再加上最近稍微了解加法器的电子设计思路,越发让我感觉计算机不容易啊,计算机只是一堆破铜烂铁,是人类利用电路的特殊原件,开通计算机的“灵智”。最后可以说一说反码,虽然它在计算机中确实没有不可被替代的理由,我们甚至可以直接拿110000000来计算,但由于非门的缘故,反码在电路中确是不可或缺的,它成了转换的结果,而用非门来运算就是来进行“看不见”的减法运算的,所以它的介绍有利于理解,如何转换。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值