前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机底层怎么实现加法的?

计算机底层怎么实现加法的?

作者头像
程序视点
发布2023-10-25 17:11:05
2340
发布2023-10-25 17:11:05
举报
文章被收录于专栏:程序小小事程序小小事
将程序视点设为星标精品文章第一时间阅读

大家好,欢迎来到程序视点!我是小二哥。

前言

在之前的文章中,我们了解到计算机的底层只能处理二进制格式的数据,也就是0和1。因此,二进制位运算是最贴近计算机真实运算操作。

其他任何文字、数字、字符等信息都要转换成二进制的格式,计算机的底层才能识别处理。

那计算究竟是怎么处理操作的呢?

答案就是:位运算

通过位运算,计算机可以高效的完成各种基础运算,也可以巧妙的完成原本很复杂的工作。了解位运算,能让我们真正理解计算机,也能更好的使用计算机。本文先来分享基础运算中的加法,看看真实的运算逻辑是怎样实际应用的。

13+9

计算机对于“+”(加号)的理解,只是一个符号而已。如果我们想让计算机明白“+”的职能的,那我们就需要赋予计算机这个职能。再通俗点讲,就是:当计算机看到我们输入“+”时,就要去调用一定的运算步骤来完成这个功能。

十进制下的运算步骤

以13+9为例,我们来看看计算的步骤:

  1. 个位上的数相加:3 + 9 = 12,个位上的结果为2,同时需要先前进1;
  2. 十位上的数相加:1 + 0 = 1,十位上的结果为1;但在1的步骤中进了一个1上来,因此十位上的结果应该是2;
  3. 个位和十位上的数都计算出来了:个位上是2,十位上是2,结果为22

上面是小学的内容,对大家来说闭着眼睛都能算!

好啦!现在我们来把这个运算过程拆分分组下。既然个位和十位上的数都有加的操作,那就可以先同时计算;个位上有进位的操作,那就把进位操作和加操作拆开来计算。就得到下面这个运算过程:

1:不考虑进位,只考虑加。 分别对各位上的数进行相加,结果存为sum。个位数3加上9为2;十位数1加上0为1;最终结果 sum = 12(每考虑个位往十位上进的数)。 2:只考虑进位 只计算各位上进位的值,结果存为carry。个位数上3加上9 有进位,进位的值为10;十位数上1+加上0没有进位;最终进位的结果 carry = 10。 3:判断步骤2中的进位结果 如果步骤二所得进位结果carry不为0,对步骤一所得sum以及步骤二所得carry,重复步骤1、2、3。如果carry为0则结束,最终结果为步骤一所得sum。 这题中步骤2中的结果是carry = 10,不为0,因此对sum和carry重复步骤1、2、3

  • 3.1:不考虑进位,只考虑加。sum个位上是2,carry个位上是0,相加得到个位上的数为2;sum十位上是1,carry十位上也是1,相加得到十位上的数为2;最终得到结果22。我这里为了区分,用 sum' = 22 来表示结果。
  • 3.2:只考虑进位。sum个位上是2,carry个位上是0,相加没有进位;sum十位上是1,carry十位上也是1,相加也没有进位;这次最终进位的结果是都没进位,结果为0,用carry'=0来表示结果。
  • 3.3:判断上一步中的进位结果。进位结果carry'=0,不再重复步骤1、2、3了,sum'就是最终结果。

我们看到使用把运算拆分分组的方式,我们最终也得到了正确答案22。

好啦!我们从前几期的文章中可以,二进制和十进制的区别是满多少向前进位而已。因此,十进制可以使用的运算拆分分组的方式,是不是也能解决二进制的问题呢?我们拭目以待!

二进制下的运算步骤

13的二进制为0000 1101,9的二进制为0000 1001

1:不考虑进位,只考虑加 分别对各位数进行相加。

结果sum = 0000 0100。(注意,图中红底所在的位相加存在进位的情况,但这一步不考虑进位) 2:只考虑进位 有两处进位,第0位和第3位。

绿底是进位的结果位。因此,只考虑进位的结果为 carry = 0001 0010。3:判断步骤2中的进位结果 步骤2中的结果carry不为0,重复步骤1 、2 、3;那我们继续吧!

  • 3.1:不考虑进位,只考虑加。sum = 0000 0100, carry = 0001 0010。

结果sum' = 0001 0110。(我用不同颜色标识了存在加的情况。可以看到每一位相加后都没有进位的情况)

  • 3.2:只考虑进位。由上面3.1步骤中可知,这次每位上都没发生进位。因此,结果carry' = 0000 0000,也就是0。
  • 3.3:判断上一步中的进位结果。进位结果carry'=0,不再重复步骤1、2、3了,sum'就是最终结果,即0001 0110,转为十进制刚好是22。

最终,通过对数据的二进制进行运算,我们也得到了正确的结果。那计算机怎么实现位上的相加和进位呢?这篇文章已经有点长了。我们下一篇文章通过代码的方式来模拟实现这个过程。有知道怎么代码模拟实现的小伙伴,也可以留言哦~

ps:给大家提示下。什么位运算让0和1结果为1,1和1结果为0呢?

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

本文分享自 程序视点 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 13+9
    • 十进制下的运算步骤
      • 二进制下的运算步骤
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档