学生可以用计算机算加法吗,计算机只会加法,那么它如何用加法来计算减法呢?...

计算机中的加减乘除都是通过加法实现的,那么你肯定很好奇,加法和减法是完全不同的操作啊,如何用加法来进行减法运算呢?下面我就通过几个例子,来解释一下具体的操作过程。

二进制加法

开始之前,我们先复习一下最简单的二进制的加法是如何运算的:

25bd4a55d6e9c053a06c23a1a0f612ce.png

二进制是逢二进一,1001+1101=10110 最高位直接进一位就行了。

十进制减法

大数减小数

我们来看一个十进制减法的例子:

1bbc6bd4e11557d313aca4e1cbe2d9b9.png

251-174=77,很简单是不是?小学低年级的题目,个位不足向十位借位,十位不足向百位借位,我们是这么口算的。

这里用到了借位,如果我们不使用借位,能不能计算减法呢?

为了便于说明,我们先复习一下,减数,被减数,差的概念:

92351d9628d6b47a889820b6c62d6f07.png

为了避免借位,我们用以下步骤来计算:首先先用999减去减数174,得到差825:

ab12595bb003645ea135bc0852d9fd45.png

然后用被减数251加上差825,等于1076:

8686119048233ce4894337953fb2a53b.png

最后,由于刚才第一步多借了999,现在要把多出来的999减掉。为了避免借位,我们在多加一个1,999+1=1000 凑成 1000,然后减去1000,这样从头到尾就不会涉及到借位的问题。

5c4a33b38fab4a5db1b83200a4837732.png

整个公式就是:251 + (999 - 174)+ 1 - 1000 = 77你有没有发现,这样就把借位的问题避开了哦。

小数减大数

如果是174-251该怎么办呢?

69ad5d7803070822fcf3eaeac88b2647.png

情况稍有不同,前面的步骤还是一样的。先用999-251=748

e361d5b7e6b53e5553c46534029f42a1.png

然后用被减数174加上差748,等于922:

4324712c99d36749eba3d208101b3293.png

按照前面的例子,现在应该是 922 + 1 - 1000 了,但是这样就涉及到借位了,这里我们要变通一下,直接用999 - 922,然后在结果前面加个负号:

7bf0c8aaef615f8fa48d003a10eb0845.png

999 - 922 = 77,我们直接在77前面加个负号,-77就是正确结果啦,这样我们就可以避开借位问题啦。

二进制如何表示负数呢?

二进制表示正负数时,一般会把最高位当做符号位,符号位0表示正数,1表示负数,那么-1用二进制怎么表示呢?

想来想去都想不到啊,不知道你有没有发现,计算机是没有减法运算的,计算机的减法是通过加法实现的,那么加法怎么能达到减法的效果呢?

我们看下这个例子:

66310b9437e834efd539223fca35e5ac.png

1 00000000超出了一个字节的范围,最高位1被舍弃,剩下的就是 00000000,这就是十进制的0啊,推理可得-1用二进制表示就是11111111,好神奇。

「仔细想想所谓补码,就是加起来等于11111111的码啊,然后再加1,最高位溢出后,不就等于0了吗,一个和原来的数加起来等于0的数不就是它的负数吗?」

这么想是不是就容易理解了呢?

换个角度看看,-174的补码就是(999-174)+ 1 = 826 ,174 +(-174)其实就是 174 + 826 = 1000 ,然后舍弃掉前面的1,结果就是0了,所以补码就是加起来会向高位进一位的数。

7f9766ef450581e4e2a64de9a0768aaf.png

9d25b6c959f9876b2d813aefab0ae425.png

下面,我们来看看补码的定义:

「补码」(英语:2's complement)是一种用二进制表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。补码以有符号比特的二进制数定义。

正数和0的补码就是该数字本身。负数的补码则是将其对应正数按位取反再加1。

补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路及补码电路即可完成各种有号数加法及减法,在电路设计上相当方便。

另外,补码系统的0就只有一个表示方式,这和反码系统不同(在反码系统中,0有二种表示方式),因此在判断数字是否为0时,只要比较一次即可。

二进制减法

好了,我们知道了补码的概念之后,再来看看二进制数的减法。

大数减小数

69cc53f47d2d6d7043a2028f1c2952c3.png

077acb59a12ca20c51fe15e86bfd1cd6.png

这样通过补码,就能把减法用加法实现了。

小数减大数

aaa4c82ef33bac65b10b7afe60602967.png

7305c8c2db28c9a1065505ebc558c264.png

10110011的十进制是179,结果也不对啊,别急,因为174比251小,相减的结果肯定是负数,计算机的负数是用补码表示的,所以10110011肯定是表示一个补码,「一个数补码的补码就是他自己」,相当于负负得正,我们再计算10110011的补码:

6a255748f9b0b33b20c0bcbcd9384303.png

得到01001101,十进制是77,一个数的补码是77那么这个数肯定就是-77啦,所以10110011表示的是-77的补码,而不是179。

最后的话

最重要的是,我们要知道补码的概念,以及补码的转换规则“「正数的取反再加1」”。

计算机巧妙的用补码来表示负数,然后通过和一个负数(补码)相加,来实现减法的操作。

例如:把减法251-174 变成 251 + (-174)的加法操作,这种把减法变成加法的操作,是不是很神奇呢?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值