计算机实现加法的学习心得

计算机怎么实现加法?今天学习了一下,主要是根据电子电路的特性制定一套规则来模仿人类的加法并最终实现。

既然是实现人类的十进制加法,就得先回顾下我们自己的加法法则。

先看看十进制加法 :

122

+      78

=     200

对于十进制运算我们知道,进行加法时,低位满10要向高位进位,二进制改成满2进位即可,都是一样的,只是又基数10变成了基数2.

比如二进制加法:

   1111010         (122)

+      1001110           (78)

=    11001000             (200)

按十进制的加法规则转成满二进位的规则,同样实现了二进制加法,不过这是实现二进制加法的理论部分,理论的输出输入,总得有个对应的物理操作才能实现吧,比如你用算盘计算12+3,总得把算盘的算珠用手拨动一下吧,用纸计算一个加法,也得在纸上写一下12+3吧,到最后把计算结果一统计,就知道刚刚的加法结果了,有人说我们直接就能心算出12+3了,不用纸和笔啊,那是因为我们对于简单的数已经熟练到形成条件反射了,如果计算一个很大的数我们未必能直接心算出来,那就得借用存储临时数据的媒介(比如纸币和算盘),同样的道理,计算机计算加法也是需要一个物理动作,也需要存储媒介和实现加法的物理动作,但是微观物理电路有个特点,他没长脑袋,他不知道什么是数字0和1,对他而言,他只有高压和低压,通电和断开这些物理状态,而这些状态,恰恰被聪明的人类发现,被人为的利用代表成了数字0和1,比如+5v电压代表数字1,0v代表数字0,这样物理电路的高低压就能帮我们储存数据了,这样加法的一个要素,存储媒介已经完成,下面就是要利用物理电路来实现加法的物理动作,这个时候我们要继续人为的制定规则来拼凑出我们要的结果,

  我们既然可以根据我们人类的思维方式来定义一个加法法则来运算,当然也可以给物理电路的属性定义一套运算规则,帮我们也完成运算,例如我们规定这样一个规则: 0 和 0 = 0  ,0 和 1 = 1, 1 和 0 = 1, 1 和 1 =0 。注意这个规则不再是我们说的加减乘除法规则了,这是一套新的规则,我们要跳出来,有了这套规则,我们就知道了,两个相同的状态会生成一个0的状态,两个不同的状态会生成一个1的状态,姑且管这个运算法则叫异或运算吧,这个异或运算对应的物理操作就是电压状态的转变规则 。

  如果我们依旧把计算机世界的各个部分组成的世界比喻成计算机星人世界,那么这里一对比就是地球人有加法,计算机星人也有加法,只是这个加法他们不叫加法叫异或运算,

并且他们的异或运算和我们的加法有点不一样,但是目的都是为了实现加法流程。

  掌握了这个异或运算规则,那么就可以进行二进制加法了吧,来看看以下例子:

                          1  1  1 1  0  1  0       转成10进制->    122

异或操作                    1  0  0 1  1  1  0         转成10进制->     78

不考虑进位的异或操作结果     0  1  1  0  1  0 0                    转成10进制->      52    和   理论结果 200相差很远啊

为什么用异或运算,算出来的结果不是我们想要的结果,难道计算机星人的异或运算规则有问题?其实这个异或运算只完成了加法的一部分而已,因为我们忘了进位了,小时候我们在做加法运算时,有的同学喜欢先把进的位写在一边,先把个位数直接加完,最后在把进的位补加上去.

比如计算            22

             +  19

先不考虑进位      31  ,  ->  这个是半成品,只完成了加法的一部分。

把进的位记上      10  

再补加上            41       -> 算上进位才是完整的加法。

同样的道理,刚刚的异或运算也没有考虑进位,所以没有完全做完,把进的位先记在一边,然后再次进行异或运算,(可能会有多次异或运算)最终得到正确结果 11001000。

实际电子电路实现加法的过程中用到的物理单位有半加器和全加器,半加器就是不考虑进位来实现异或运算的电子原器件,这种加法只能做一部分加法,所有加半加器,全加器就是考虑了进位的电子原器件,有了这些物理单位,给他们输入要算的数,就能让他们完成我们要的加法了。

时间: 2024-10-14 07:51:32

计算机实现加法的学习心得的相关文章

Linux系统理解以及Linux系统学习心得

原创作品转载请注明出处  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 作者:严哲璟 说一下我对Linux系统的理解 1.加载Linux内核准备:在加载基本输入输出模块(BIOS)之后,从磁盘的引导扇区读入操作系统的代码文件块到内存中,之后开始整个系统的初始化. 2.main.c的start_kernel函数是整个操作系统的入口,这也与Linux是基于C语言的特性相符,start_kernel具体做的动作很多

我的MYSQL学习心得(八)

我的MYSQL学习心得(八) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 这一篇<我的MYSQL学习心得(七)>将会讲解MYSQL的插入.更新和删除语句 同样的,只会讲解跟SQLSERVER不同的地方 插入 将多行查询结果插入到表中 语法 INSERT INTO table_name1(column_list1) SELECT (

我的MYSQL学习心得(一)

我的MYSQL学习心得(一) 使用MYSQL有一段时间了,由于公司使用SQLSERVER和MYSQL,而且服务器数量和数据库数量都比较多 管理起来比较吃力,在学习MYSQL期间我一直跟SQLSERVER进行对比 第一期主要是学习MYSQL的基本语法,陆续还有第二.第三.第四期,大家敬请期待o(∩_∩)o 语法的差异 我这里主要说语法的不同 1.默认约束 区别:mysql里面DEFAULT关键字后面是不用加括号的 --sqlserver CREATE TABLE emp ( id INT DEFA

在马哥linux运维学院学习心得

题目:在马哥linux运维学院学习心得 姓名:谭龙 班级:M18 学号:26 时间:2016-02-29--2016-06-02(正常毕业时间预计在7月中上旬)   正文: 个人基本情况: 我是一名在校的即将毕业的大四学生,毕业时间为2016.7.专业为矿物加工工程专业,纯正的四川-广安人(邓小平故居就在那).因找不到工作,加上自己也不知道干什么,在堂弟的推荐下,来参加了马哥linux运维学院的学习:怀揣着一颗对计算机懵懂的心,开始涉足从未接触过了linux. 个人收获与心理变化: 在一开始接触

第一篇大数据学习心得

之前未习惯发布学习心德博文,后续会采用这种方式发布学习心得,希望能够很好的督促自己. 计划会按scala,Hadoop,Spark的顺序去学习. 刚学scala的时候,眼前一亮,这语法跟python,java很像啊,刚好两者很熟悉,偷笑,后面果然学的得心应手.今天就不发表具体的技术内容.反正王学林老师的视屏讲解很好,声音非常富有感染力,想开小差都比较难,呵呵,话语精炼,个人较喜欢的风格,这里说下这段时间学习scala的小心得?,视频学完一章紧接着进行敲代码,调试,最后记笔记,对,记笔记,不一定是

spring核心知识(学习心得)

直接进入主题,主要分为两大部分:框架学习心得和spring框架的核心知识. 学习心得 1.学习框架的时候,一定要弄清楚的几个问题: a. 这是一个什么框架 轻量级还是重量级, 侵入式还是非侵入式,是解决单个问题还是整体的解决方案. b. 框架的设计理念是什么(为了解决什么问题而出现) c. 框架的优缺点 d. 框架的架构是怎样的 e. 框架的核心是什么 f. 框架能实现哪些功能 在学习一个框架的时候如果都不知道它能够提供哪些功能,就更加不用谈功能实现和充分利用框架了 2. 在学习多个框架以后,如

C++用法的学习心得

c++这门课,在我刚进入大学的就已经开始接触了.因为自己的专业就是计算机科学,因此c++嘛,对于我来说还是比较重要的.不同于其他专业,一开始我接触就是c++了,跳过了c语言一类的课.就我自己认为,c++这课学起来还是很有难度的.大一上课的时候,老师就说过这课在生活中的应用很广泛.处于初学者的我,开始给我的感觉就是很是乏味枯燥,提不起兴趣.不过仔细想想自己的专业就是和它有关,就算将来自己不从事这个行业,还是很有学习它的必要.因为多一门技术总归是不会吃亏的. 作为男生嘛,自己没有少玩游戏.很多人玩游

Android学习心得(16) --- Dex文件结构实例解析(2)

我在博客上发表一些我的Android学习心得,希望对大家能有帮助. 这一篇我们讲述一下通过一个实例来分析dex文件结构和组成. 参考Leb128数据类型 Android学习心得(5) --- dex数据类型LEB128 参考实例分析学习理解dex文件结构Android学习心得(15) --- Dex文件结构解析(1) 参考baksmali工具使用Android学习心得(4) --- MAC下smali文件编写与运行 1.编译 我们通过一个例子来分析dex文件的构成 创建一个Hello.java文

Android Window PhoneWindow Activity学习心得--第三弹

Android Window  PhoneWindow Activity学习心得--第三弹 前面 我们完成了从Activity到PhoneWindow的整体跨度 正如我们所知道的与Activity组件关联的一个应用程序窗口视图对象关联一个ViewRoot对象,而将 一个Activity组件的应用程序窗口视图对象与一个ViewRoot对象关联是通过该Activity组件所使用的 窗口管理器(WindowManager)来执行的. 在我们初始化DecorView完成之后,我们需要关联应用程序窗口视图