zoukankan      html  css  js  c++  java
  • 计算机基础第一章:布尔逻辑和逻辑门(Boolean Logic&Logic Gates)

    布尔逻辑和逻辑门(Boolean Logic&Logic Gates)

    说明

    这次疫情在家有很多的时间,无聊之余在家刷了很多学习的视频,其中有一套就是关于计算机科学的视频
    视频地址
    个人感觉这是一套很好的学习视频,强烈推荐,不管是计算机从业人员,还是对计算机感兴趣的人,相信学习之后都会又很大的帮助。
    我是一名从事软件技术开发程序猿,随着计算机语言不断的成熟,各种框架不断更新,我工作的时候大多数时间都是和相对高级编程语言和各种框架打交道,一般都是用轮子,基本不会去造轮子,很少去从更底层的角度去了解计算机CPU和内存的工作基本原理,以及编程语言的基本原理等等。之前大学也简单的学习过一些计算机的科学知识,但是基本都忘记的一干二净了,所以决定要尝试着搞清楚这些问题,很多时候不用造轮子并不代表不需要知道轮子的原理,所以才有了接下来的几篇文章。
    好记性不如烂笔头,这是我前面时间的学习笔记,整理的一些刷这套视频的笔记,但不是每一个视频都有笔记,我只整理的我个人觉得有必要整理的内容

    一.前言

    相信很多人都想过这样一系列类似的疑问,CPU是如何工作的?内存是如何工作的?CPU和内存是如何交互的?简单易懂的高级编程语言是如何转换成计算机可以读懂的“0”,“1”的?为什么计算机用二进制来记录和运算数据,而不用人类更容易理解的十进制来处理计算呢?......
    搞明白上面这一系列问题,并不是一件易事,我想我们应该从计算机的大脑——CPU开始,说到CPU,我们应该不难会联想到组成计算机读写和运算的最小单元——晶体管,CPU和内存的基础物理结构都离不开晶体管,所以接下来的文章我们我们从最小单元晶体管开始,逐个探索并解答上面的一系列问题。

    二.简单了解晶体管

    1.解释说明

    我们下面只是简单的了解一些晶体管,注意这里并不是从硬件的物理结构去深入分析,只要知道晶体管有如下两个特性:

    特性1:

    晶体管可以控制电流的开关的闭合来代表不同的信号,电路闭合,电流通过,代表“真”(也可以说代表二进制的1,这只是一个说法,随便怎么说都可以),反之电路断开代表“假”(0)

    特性2:

    晶体管由于它的物理特性可以产生不同的电流状态(不同于电阻和超导体,半导体半导电的特性,可以更明显的控制电流的强弱),不同的电流状态可以当做不同的信号被识别

    2.计算机为什么采用二进制?

    了解晶体管的两个特性之后下面来解答开头其中一个的问题:计算机为什么采用二进制而不是十进制

    理由一:

    由于晶体管可以控制电流的多种状态,早期一些计算机并不都是采用的二进制的,也有采用三进制甚至是五进制的,但是问题是状态越多,电流信号越难区分,电子设备还可能受电池电量或者附近其他电子设备(如微波炉)的电噪音影响,从而无法正常工作,而二进制采用较少信号种类区分(0和1两种电信号),可以较好的避免这种问题,最大的提高容错率
    下面两张图为两种信号的区别:

    很明显二进制电信号容错率最高
    但这只是计算机为什么用二进制的原因之一。

    理由二:

    另一个原因是,数学领域有一个数学分之的存在,专门处理“真”和“假”,叫“布尔代数”,它可以很好的运用到了计算机领域,乔治布尔(George Boole)就是布尔二字的由来,他是以为十九世纪自学成才的英国数学家,在“常数”(我们的十进制数)代数里,我们可以直接对数字进行加减乘除之类的操作,但在布尔代数中,变量值是true或false,可以进行逻辑操作,布尔代数中有三个基本的操作:NOT,AND和OR。最主要的是布尔代数已经可以解决目前已有的所有数学法则和运算
    简单了解了“晶体管”,也知道了计算机为什么采用二进制,下面继续抛出一个新的问题,“晶体管”是如何变成“CPU”和“内存”的,想要了解“CPU”和“内存”的构成,我们首先要了解“晶体管”是如何实现上面的三个基本操作的:NOT,AND和OR

    三.简单学习常规的逻辑操作:NOT,AND和OR

    1.NOT门操作

    NOT操作把布尔值进行反转,把true进行NOT就会变成false,反之亦然
    我们来画一个晶体管,晶体管有三根线:两根电极线和一根控制线
    如下图左边那根是控制线,右边两根是电极线:

    控制线通过调节自身来控制电流开闭,它的作用就像龙头开关,可以给控制线的电流通电,右边的电流也就可以从一个电极流到另一个电极。

    我们可以把控制电流线当成输入(input),底部电极当做输出(output),如果我们打开输入,输出也会随之打开,因为电流可以流过,反之!

    我们用布尔术语来解释上面:输入为true,则输出true,反之。下面是对应的“真值表”(真值表就是通过控制电路开关会发生的输入输出情况对应表,这里我要提醒一下,后续内容的每一个逻辑门,一定都要看明白这张“真值表”了再去看后面的内容

    上面这个电路没有太大的实际意义,因为它的输出和输入是一样的,但是我们可以稍加修改,就可以实现NOT门,我们可以在上面电极加一个根线,把上面电极输出移到上面,如下:


    这里可能你有点难以理解,如果打开输入,右上角的电极为什么电流不会直接流向输
    出而是从下面电极流走呢?为了简单的理解,我们不必去深入晶体管的物理原因,还是用生活中最常见的水管来举例,由于地势和水压的差距,如果街上的大水管放水,水压原因家里的水龙头就没水了。
    如下面两张图:

    2.AND门操作

    AND门有2个输入,一个输出,如果两个输入是true,输出才是true。下面是对应的“真值表”

    对应的晶体管连接如下图:


    只有A,B两个控制输入同时打开,才有电流

    3.OR门操作

    OR门一样也有两个输入,一个输出,只要有其中一个为输入为true,也输出true,下图为“真值表”

    对应的晶体管连接如下图:


    上面AND门可以理解为串联,而是OR门可以理解为并联

    4.将逻辑门抽象成为符号

    我们在理解完上面三种逻辑门之后,为了能好的理解后面的知识,可以将三种逻辑门分别抽象成为三个整体如下图,这种化简为整的抽象思想我们后面会经常用到。
    为了便于区分,
    我们把NOT门画成一个三角形前面小圆点表示:

    AND门用一个“椭圆插座”表示:

    OR门用一个“太空飞船”表示:

    我们可以用上面这三种“符号”来表示他们,后面用来构建更大的组件时,就不会因为结构看起来太复杂而影响理解。

    5.异或门(XOR)

    除了前面三个,还有一个相对特殊的布尔操作叫做“异或”(XOR),异或的特点是输入相同,则输出false,反之输出true,下图为“真值表”

    用晶体管实现异或操作有点烧脑子,也不便于我们去理解,所以我们可以用前面的三种门的抽象符号来实现异或门,异或门也有两个输入,一个输出,如图:



    四张图更直观的表达了异或的四种情况
    我们当然为了后面的理解,也可以把这个异或门抽象为一个整体符号,我们用一个横着的“笑脸”来表示,如图:

    四.总结

    上面我们把所有的操作门基本原理系统性的过了一遍,并把他抽象成为了一个整体,其实我们也不用太担心异或门具体用了几个其他门,也不用太在意其他几个门又是怎么用晶体管拼接的,或电子是怎么流过半导体的,只是为了简单的过一遍混个眼熟就好了,其实就是工程师在设计处理器的时候,也很少在晶体管的层面上思考,而是用逻辑门或者更大的组件,如下图所示为设计图的一小块部分:

    专业的代码程序员更不用说了,也不会考虑逻辑在屋里层面是如何实现的。
    我们只要简单的把这些门的整体符号存入我们大脑的工具箱,以便于后面所讲的知识会用到这些抽象的符号。

  • 相关阅读:
    React 中使用 pdf.js 将 pdf 转换成图片
    html2pdf 无法导出 html 中 img 图片的解决方法
    js-xlsx 实现前端 Excel 导出(支持多 sheet)
    React 项目引入 Dva
    项目构建分析和 webpack 优化实践
    《写给大家看的设计书》读书笔记
    2019年六月前端面试经验总结
    UITableView .grouped 类型去除顶部间距
    Ant Design Upload 组件上传文件到云服务器
    家庭动物园下载链接
  • 原文地址:https://www.cnblogs.com/ruanraun/p/Logicgates.html
Copyright © 2011-2022 走看看