前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谈一谈|计算机是如何做减法的

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

作者头像
算法与编程之美
发布2020-07-14 16:04:03
8130
发布2020-07-14 16:04:03
举报

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

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

要解决这个问题,首先从最右列入手,可以看见,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 团队

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档