您当前的位置: 首页 > 

暂无认证

  • 1浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

谈一谈|计算机是如何做减法的

发布时间:2020-07-10 00:00:00 ,浏览量:1

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

欢迎加入团队圈子!与作者面对面!直接点击!

对于加法来说,计算机很容易实现,加法是始终从两个加数的最右列向最左列进行计算的,每一列的的进位加到下一列中。而在减法中没有进位,只有借位,它与加法存在本质的区别。

例如,可以先看一道例题:

要解决这个问题,首先从最右列入手,可以看见,6是大于3的,所以要从5上借1,再用13减去6得到7。由于5已经被借走1,所以实际上是4了,继续向2借1,得到7,以此类推,我们可以得到结果为77。

可以通过一些小技巧来让减法不涉及借位。为了避免借位,首先要从999中减去减数,而不是从原本的被减数中减去减数。

由于操作数是三位数,所以这里使用了999。从一串9中减去一个数叫做对9求补数,176对9的补数是823.计算出补数后,将补数与原来的被减数相加就可以得到1076,最后再将结果加上1,并减去1000。这样就得到了结果77,而且没有使用到借位。原理是这样的:

等价于

然后将数字重新组合

那么将这种方法应用于二进制,就变为了:

第一步,用11111111(255)减去减数:

第二步,将补数与减数相加:

第三步,将结果加1,再减去100000000就得到1001101,就等于十进制数的77。

其实可以发现,上述的补数,就是把减数按位把0换成1,把1换成0。然后把补数和减数相加得到的结果再减去100000000,实际上在电脑中没有进行这一步,它是直接把最高位舍弃了。就好比一个24小时的时钟,现在是23点,再加上三个小时就是26,但是时钟最高位只有24,接着就是1点了,所以当超过24过后就溢出,得到了2点。在计算机中如此。当只有8位的时候,最后补数与减数相加得到了9位,就溢出最高位,就得到了正确结果。

END

主  编   |   王文星

责  编   |   刘玉江

 where2go 团队

   

微信号:算法与编程之美          

长按识别二维码关注我们!

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

1.3968s