用yacc编写的算术运算计算器实验原理_【计算微课】第一章:从算盘到CPU,原理竟然如此相似...

660bb8bc024ddd77fcbfd7b67ed09c88.png

如果我问大家,世界上最早的计算器是什么的话,我想大家肯定都会说是算盘,没错,这是人类最早的手摇计算器,这个是小学的课本就说过的东西,但是我想大多数人都会对此都嗤之以鼻。绝大多数人都想不明白为什么算盘这种东西,如何和现代的电子计算器联系起来。事实上,无论是从原理还是从表观计数,算盘和现代电子计算器几乎一致。我们来看看两者是怎么工作的。

1740d380a5b7811c439851f72da49c32.png

人类最早的手摇计算器——算盘

我们都知道,算盘是上面两个珠子,下面五个珠子,下面一个珠子为一,上面一个珠子为五,从右到左依次为个十百千万。运算时依次进位,计算结果可以视为a*10^0+b*10^1+C*10^2…..算盘有自己的四则运算口诀,用于进退位的打法。细的口诀我不说了,我主要说一下减法,为什么说减法呢?因为减法是算盘里计算法则中最接近于电子计算机的,我举个例子,算盘里有句口诀叫“一退一还九”,是什么意思呢?就是说假如减一时十位的破了(10-1=9不够10了,即高的位数不足一了,就要把高的那位退了,然后在低的那位加九,用数学表达式表示为10-1=10-10+9=9。学过二进制的吧可能反应过来了,9就是十进制中1的补码。但没学过二进制的吧务友懵逼了,补码是什么东西?上面我说过,十进制里任意的数都可以表示为a*10^0+b*10^1+C*10^2…二进制也一样,任意一个数都可以表示为a*2^0+b*2^1+c*2^2……区别在于,十进制的abc从0~9整数中取,二进制则只能取0/1。而补码就是指用比这个数的高一个次方的整形数减去这个数得到的值,这样说很抽象,我们来看实例,比如说51,它等于5*10+1*1,比它高一个次方的整型数是100(10^2),那么它的补码应该是100-51=49。我们来看二进制,一个数是10110=(1*2^4+0*10^3+1*10^2+1*10^1+0*10^0),比它高一个数量级的整形数为100000=(1*2^5),那它的补码为100000-10110=01010=(0*2^4+1*2^3+0*2^2+1*2^1+0*2^0)。二进制的加减法(纸上运算)和十进制是一样的,只不过进位和借位由10变成了2。有了补码的概念,我们可以说补码的减法了。补码减法实际上是一种加法,原理是被减数加上减数的补码再把最高位减去1。

讲到这大家应该能理解为什么算盘能算是最早的计算器了。算盘的问题我们在这告一段落,我们由算盘引出了电子计算器的运算方式(由于我们只是业余的了解,所以在这只讨论加减法,乘除法有兴趣的自己了解)。我们知道,电子计算器使用的进制是二进制,原因很简单,二进制只有1和0两个数,可以由电路的通断直 接表示,1表示通,0表示断。所以就有了布尔运算,即逻辑运算。逻辑运算分为与或非三种。或运算其实就是加运算,1+0=1,0+1=1,1+1=1,0+0=0。在电路上,或操作可以用两个并联的开关来实现,当然,加法不只是一个或操作就能实现的,因为或操作只能实现一位数的加法,但是没办法实现进位,要实现多位数的加减,就必须用多个与或非电路组成全加器,全加器有很多种,大家可以自己找来看看。我们来看看为什么电子计算器要使用补码,我们来看看一个有趣的事情,我们随意找一个二进制数110101001,我们把它所有的位全部换为反数(0换1,1换0)得到001010110,把110101001+001010110=111111111,如果再加1,会得到1000000000.所以,把全部换为反数后加上1就可以得到补码,这在电子电路中是很容易实现的。所以使用补码运算在电子计算机中更合理。说了那么多,不知道大家有没有注意到我上面都是说计算器,而不是计算机。为什么呢?因为上面说的全加器只能算ALU(算术逻辑单元),只是CPU最简单的一部分。那从ALU到CPU之中又有什么呢?我们下次再说。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值