首页 > 其他分享 >turing complete(图灵完备)——基础逻辑电路

turing complete(图灵完备)——基础逻辑电路

时间:2024-05-24 23:27:14浏览次数:16  
标签:输出 complete 高电平 真值表 turing 图灵 或门 电路 输入

前言

        两个月前玩了个挺有意思的游戏——turing complete(steam售价70RMB)。大致情节是:外星人侵略地球,而你被外星人抓走了,它们决定将智力低下的生物都吃掉,而它们区别你是否智慧,是否吃掉你的依据是:你能否从简单的门电路开始手搓一台计算机......

        本篇内容讲的是我游玩这个游戏的第一部分——基础逻辑电路时的收获与感想。

原力觉醒

        一点开始游戏,就有外星人老哥给我们来了点“小惊喜”。

        第一关很简单,只是说明了一下输入的开关情况。

        呃呃......

非门与四个基本门的相互关系

        四个基本门指与门,与非门,或门和或非门,非门和四个基本门我们比较熟悉,但它们间的关系还是比较有趣的。这里简单带过关卡内容,主要精力花到解锁的第一个手册词条—— “德·摩根定律”上。 

与非门(NAND)

        这一关简单认识了下与非门的输入输出情况,这将是我们构建计算机的起点。

        之后,我又用与非门搭建了非门,或门,或非门和与门。

非门(NOT)

或门(OR)

或非门(NOR)

与门(AND)

德·摩根定律

         德·摩根定律描述的是非门与四个基本门的相互关系

从真值表看

        让我们在四个基本门的真值表的输入与输出之间划一条蓝线,将其分成上下部分两张卡片,可以发现,四个门电路的真值表的上卡片一模一样,区别在于下卡片,而其特点在于:

  1. 当对输入加非门时,下卡片旋转180°。
  2. 而当对输出加非门时,下卡片的颜色颠倒。

从门的名称看

        我们把这四个门的名称从两个角度来看,一是有无N,我姑且称它为N属性,二是主体为OR还是AND,我姑且称它为OA属性。如此可以得到下面两个直观的结论:

  1. 对输入加非门时,门的N属性和OA属性同时被反转了,
  2. 对输出加非门时,门的N属性被反转了。

再回看

        再次观察这四个电路,有没有对“德·摩根定律”更清楚一点 ?


其他基础逻辑电路

高电平

        这关要求实现一个任何时刻都输出高电平的电路,实现方法很多,我采用了个简单易懂的。

        这样我们就有了一个能持续输出高电平的”电源“了。

第二刻 

        关卡“第二刻”,要求只在第二时刻输出高电平, 通过逻辑代数运算可以知道:

A and notB

        就是结果,根据式子接了下面的电路。(输入1写作A,输入2写作B,下文相同)

异或门(XOR)

        这关也是给定真值表让我们设计电路,同样用逻辑代数运算:

“(A and notB)or(notA and B) ”

        这个式子想要电路接得好看点就得花点心思了,现在还没有解锁电路的导线颜色选择和导线注释功能,还是有点难受的。

三路或门

         还是给定真值表让我们设计电路,但这关的真值表看起来有点可怕,因为现在有3个输入,8个结果,但我们看它的名字叫“三路或门”,可以想到这个电路的逻辑算式是:

A or B or C”

        依据这个结果可以轻松画出下面的电路。

        这关直接看正值表也可以,可以采用逆向思维,把不想要的输出表达出来再取反:

“not(notA and notB and notC)” 

        依据这个结果可以画出如下电路。

三路与门

        有了设计三路或门的经验,三路与门就简单多了。

“输入1 and 输入2 and 输入3”

同或门(XNOR)

         对比看看前面的异或门真值表和现在要设计的同或门的真值表:

        可以发现,同或门和异或门的结果完全相反,所以同或门只需要在之前设计的异或门电路输出口上加个非门就可以实现了。 

后言

        自此,基础逻辑电路的部分就结束了,上面所学的只是一个个零件,接下来才是开始组装计算机的各个部分,做好了准备工作,终于可以迎接挑战啦!下一阶段是算数运算和存储器的同步学习,再之后就是处理器架构和编程了。

标签:输出,complete,高电平,真值表,turing,图灵,或门,电路,输入
From: https://blog.csdn.net/weixin_73483158/article/details/139184046

相关文章

  • YouCompleteMe如何获得未使用的端口
    intro由于每次vim都启动一个ycmd服务进程,并且端口地址是由vim客户端指定的(因为ycmd启动之后vim客户端需要连接过去),所以vim在指定端口的时候就需要给出一个当前没有使用中的端口。那么如何获得一个未使用的端口呢?tsecer@harry:psaux|fgrepycmdtsecer+30220840.92.5......
  • 读天才与算法:人脑与AI的数学思维笔记16_音乐图灵测试
    1.      艾米1.1.        人工智能作曲家1.1.1.          分析机可能会生成任意复杂程度、精细程度的科学的音乐作品1.1.1.1.           阿达·洛夫莱斯1.1.2.          巴赫的作品是大多数作曲家开始学习创作的起点,也是......
  • 处理报错 ResizeObserver loop completed with undelivered notifications.
    //处理报错ResizeObserverloopcompletedwithundeliverednotifications.exportconsthandlerResizeObserverError=()=>{constdebounce=(callback:(...args:any[])=>void,delay:number)=>{lettid:any;returnfunction(...args:an......
  • YouCompleteMe completer及插件模型
    问题尽管VSCode提供了在windows下通过ssh访问linux机器的各种便利,但是使用vim在linux环境下开发可以方便的使用从Unix系统中继承的强大工具集(例如grep命令),并且构建、部署也更加方便。加上vim丝滑的操作流,使得linux环境下vim开发依然有着很大的吸引力。但是由于vim的定位只是......
  • Qt:通过QCompleter类提供的补全框completion box, 根据用户输入的内容提供可能的补全选
    1.创建一个字符串列表作为补全数据源QStringListwordlist;wordlist<<"apple"<<"banana"<<"orange";2.将QCompleter的数据源设置为之前创建的QStringList,与QLineEdit控件关联QCompleter*completer=newQCompleter(wordlist,this);......
  • 基于Ordinals在比特币L1网络实现EVM图灵完备智能合约支持——BxE协议
    1.BxE项目背景区块链技术自诞生以来,为金融、供应链、数字身份等领域带来了变革性的创新。然而,作为第一个成功应用区块链技术的比特币,存在着一些局限性,如较低的交易吞吐量、较高的能源消耗以及有限的脚本功能。这使得比特币在支持复杂应用和智能合约方面显得力不从心。为了解决......
  • 30 天精通 RxJS (19):实践范例 - 简易 Auto Complete 实作
    今天我们要做一个RxJS的经典范例-自动完成(AutoComplete),自动完成在实务上的应用非常广泛,几乎随处可见这样的功能,只要是跟表单、搜寻相关的都会看到。虽然是个很常见的功能,但多数的工程师都只是直接套套件来完成,很少有人会自己从头到尾把完整的逻辑写一次。如果有自己......
  • 深度探索:机器学习神经图灵机(Neural Turing Machines, NTMs)原理及其应用
    目录1.引言与背景2.定理3.算法原理4.算法实现5.优缺点分析优点:缺点:6.案例应用7.对比与其他算法8.结论与展望1.引言与背景在人工智能与机器学习的前沿研究中,如何赋予计算机系统更强大的学习与推理能力,使其能模拟人类大脑的复杂认知过程,一直是科学家们不懈探索的......
  • Wpf BackgroundWorker DoWork RunWorkerCompleted
    //xaml<Windowx:Class="WpfApp37.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic......
  • 解决ERROR ResizeObserver loop completed with undelivered notifications.
    该报错虽然不影响项目运行,但是影响开发效率,总是弹出报错的黑框很烦人该报错原因:newResizeObserver包裹的方法,在布局发生变化时,不支持每帧都调用解决方法:用window.requestAnimationFrame包裹回调函数在App.vue/main.js中加入以下这段代码即可解决://app.vue写在script......