汉语 | 英语 | 性质 |
与门 | AND | 全绿就绿 |
或门 | OR | 有绿就绿 |
非门 | NOT | 就是叛逆 |
或非门 | NOR | 全红就绿 |
与非门 | NAND | 全绿就红 |
同或门 | XNOR | 不同就红 |
异或门 | XOR | 不同就绿 |
这一关和其他关卡不太一样,它更像是一个小游戏。你需要在玩这个小游戏的过程中,理解二进制的几个特点。这个小游戏并不难,你可以先自己玩,再听我来解析。具体玩法就是用下面的数字拼出来他给的数字。
这关貌似有个BUG,它说必须通关3级,实际上必须把5级都玩完。
位权=基数位数-1
其中,几进制基数就是几。在二进制中,可以这样书写:位权=2位数-1
假设我们现在有一个8位的二进制数10101010,那么根据公式计算,可得它每一位的位权分别是:128、64、32、16、8、4、2、1。你有没有发现,这和本关下方的按钮是一样的?
现在,我来举几个例子,你对照上图,就能发现其中的奥妙:
我们输入已经拓展到了4个。现在来观察真值表,找到规律。
规律就是:“当有≥2个绿,输出绿”这关的解决方法也比较简单。首先把四个输入端两两接入与门检测,根据我们小学就学过的排列组合,4个输入端的排列方式有:
共6种组合方式,因此我们需要用到6个与门:
将它门按照我们策划过的排列组合进行连接:
然后将这些结果使用或门连接,我们可以使用2个三路或门+1个或门:
本关最终答案 这样就完成了,但是不知道有没有更好的方法。
首先我们要先看到问题的本质,假设我们现在只有两个输入端口,那么我们如果想判断是否是奇数个为绿,其实我们判断的就是这两个输入是不是一个绿一个红。那么什么逻辑门是能解决这个问题的呢?是异或门。
这种情况下,“判断输入是否不同”==“判断绿色是不是奇数个”。当我们的输入数拓展到4个,其实问题也是如此。我们只需要先判断两个,然后判断后两个,再把这两个判断结果放在一起判断即可。
本关最终答案
循环依赖是指一个或多个对象之间存在直接或间接的依赖关系,这种依赖关系构成一个环形调用,有下面 3 种方式。
图片来源于 https://www.elecfans.com/d/1891334.html 在本游戏中,至少目前,循环依赖是被禁止的。在某些电路中,循环依赖是被允许的。目前你不需要知道哪些电路是被允许的。
我们构建一个受自身影响的电路即可。也就是说,一个元件的输出连接到自身的输入上,例如:
本关最终答案
其实此结构也可以满足测试2的要求:
请务必先理解本关的目标:
我们的输出端一共有3个引脚,分别是1、2、4。这3个引脚是怎么运作的呢?是这样的:
我们可以直接沿用“奇数个信号”的电路:
观察真值表,我们可以发现,所有预期输出1的地方,全都正确了。 现在我们来考虑:如何判断输入端是否有2个绿?我们好好回忆一下,其实我们做过类似的电路。记不记得我们做过一个电路:“如果≥2个绿,则输出绿”?没错,是在“成对的麻烦”那关。现在我们只要把电路改成:“如果≥2个绿,且不是4个绿,则输出到第2个端口”即可。
现在我们来回忆一下:如果想判断是不是有两个是绿,只需要成对进行与门判断,然后再用或门连接即可。我们将这个电路做出来:
然后,我们将刚才做的两个电路,结合一下。注意,该插在哪个孔的还要插在哪个孔。
运行后发现,我们不仅解决了2的问题,还解决了我们刨除掉的3的问题,这是为什么?很简单,因为1+2=3,这用到了我们之前的进制转换原理。我们做好了1的电路,2的电路,当这两个电路叠加在一起,自然就是3的电路。
现在,我们只差4的电路,我们只要检测四个输入端口是否全是绿色即可,这很简单。先两两判断,然后再总的判断:
接下来,我们将3个电路合在一起。注意,该插在哪个孔的还要插在哪个孔。
运行后发现,还是不能准确的判断4的结果,显示为6。分析,错误源于“当同时出现4个绿色时,必然同时出现2个绿色”,因此,4+2=6。我们需要想办法做到“当同时出现4个绿色时,使2的电路失效”。我们只需要在2路和3路上加一个异或门,也就是“在2路和3路中,只有1个输出绿色时,才能在2路输出绿色”,可以理解为“只有在3路关闭时,2路才能启用”。这就是本关的完整电路:
本关最终答案
当我们在说“1”和“绿”时,其实我们说的是同一个东西。
如果你还不理解什么是布尔值,请点击这里跳转到百度百科查看,不用了解的太深入。
我们有两个输入端,两个输出端,但本关比较简单。先观察:
可以分析出这关要让我们做什么:
首先我们发现,如果只看A和B,可以总结为“如果输入不同,就在总和输出1”,这显然是异或门的性质,因此我们先这样接入一个异或门:
接下来,然后来看C,我们只需要在两个输入同时为1时,输出到进位即可:
本关最终答案
这关获得了延迟线,可以把数据延迟一刻再输出到下一段电路。目标是延迟两刻,其实只要在一条线里加两个延迟线即可:
本关最终答案
举个例子:
根据我们之前讲过的十进制转二进制,8位分线器把90这个数字拆解为2、8、16、64,那么这4个数字就是绿色,其他数字就是红色。八位集线器会把这些数字再合到一起,再变成90。
本关我们要制作一个将数字翻倍的电路。其实非常简单,只要把每个1位数据都×2即可。本来应该接2的咱们接4,本来应该接4的咱们接8,每个都翻倍,数据就翻倍了。
本关最终答案
本关几乎和“信号计数”那关的1、2、3完全一样,只是把红、绿换成了0、1。
本关和半加器类似,只不过输入变成了三个。我们观察表格,找规律,得出要求:
2号要求处理完毕,现在我们处理3号要求。根据我们在“信号计数”那关的经验,当我们做好3号要求时,4号要求应该会自动做好,因为4号要求其实是2号要求和3号要求的叠加。
如何判断是否有2个1,我们也学过。两两进行与门判断,然后再用或门连接:
本关最终答案 我们发现,要求4真的自动做好了。这就是本关的电路。
我们之前学习过,在本游戏中,循环依赖是不被允许的。但是延迟线的加入可以解决这个问题。
游戏中的方形引脚,不会造成循环依赖,因为它不会影响同一刻的输出值。
本关要求我们制作一个“再偶数刻输出0,在奇数刻输出1”的电路。
观察真值表发现,本关的输入全是0,因此最终结果与输入毫无关系,所以实际上我们可以直接将输入端抛弃,这是一个障眼法。我们可以这样制作:
本关最终答案 现在我们一刻一刻来看这个循环:
本关我们要制作一个异或门(XOR),也就是当两边不一样就输出1。但是我们的材料有限,只能用2个非门和2个开关。我们将1加上非门作为开关,2作为通向输出的线路:
这时我们会发现:
这样才是一个完整的异或门。我们需要将这个电路翻倍,也就是将1加上非门作为开关,2作为通向输出的线路:
然后将两个电路拼在一起,注意不要插错孔:
本关最终答案
我们仔细看一下这个电路的最右侧。在我们之前的关卡中,如果这样连接会显示短路,但是本关并不会。请仔细阅读本关关卡说明第一页,弄清楚这是为什么!
观察
观察本关背景,我们可以看到有很多水滴型的图案,它们由分型构成。而分型,就意味着无限。因此,本关背景所暗示的是“无限”。它们就像是一朵朵绽放的花朵,象征着无限的生命力。它们又像是一个个的灵魂,象征着死亡。本关,是生命与死亡的无限碰撞,是矛盾的产生与矛盾的化解,是无限复杂的宇宙,而无限与本关毫无关联,实际上这个背景图也与本关毫无关联(⊙x⊙;)
让我们来看一眼真值表:
怎么这么眼熟?这不就是异或门吗?!恭喜过关。
本关最终答案
异或门其实也可以被当作一个取反器,你可以把它理解成是一个可以开启或关闭的非门。你可以把一端作为要输出的数据,那么另一端就可以用于去决定是否要取反。
以上是用1举个例子,接下来把剩下的14个都像这样操作:
本关最终答案
本关异常简单,解题方法就写在下面。
本关最终答案
性质:运算前+运算后=255 ,举个例子:
28+227=255 反码 把一个二进制数的每位都反转,例如 10101010 和 01010101 互为反码。其实这一关就是在获取一个二进制数的反码,这种方式我们以后还会用到。
我们先将输入的2个8位数据拆分为16个1位数据,然后将他们放入全加器进行相加操作,再输出至集线器:
这样我们就解决了第0位,现在我们要解决第1位。根据我们之前讲过的二进制原理,分线器上2个写着“2”的输入端,实际上是写着“1”的位的进位。那么下面这三张图是,画红圈的三个点,实际上应该是在同一位上的:
所以说,我们只要把这三个同位的点加起来,再输出到集线器的“2”即可:
接下来,三个画黄圈的点,就又是在一位上的了。我们就一直这样制作下去,一直做到不能再做,我们一共需要8个全加器:
最后一个全加器右下角的点又是一个进位,是第九位,超出了8位数据,我们只要把它连到CAR上就好:
本关最终答案
在已经学习过二进制的前提下,本关不需要在过多做解释,注意关卡结束时的要点总结即可:
首先我们在选通器上做两条路,这两条路相反,不是A亮就是B亮:
然后放置开关,注意必须要放8位开关:
连接即可,注意不要弄错A和B:
本关最终答案
因此,我们首先把每一位都反转,获取反码:
然后,我们只要将这个反码+1,就是补码,而补码就是它的相反数。 胜利在望了!可是如何获取1呢?我们在“半加器”里讲过:
也就是说,我们只要使用“高电平”元件,当作1即可。使用8位加法器,将刚才获得的反码,与高电平的1进行相加,即可获得补码,也就是相反数:
本关最终答案
我们将4条蓝线汇集到一条上,这条线叫做“总线”。总线的左侧,我们通过两个8位开关,控制应该让哪个数据保持在总线上。总线的右侧,我们通过两个8位开关,控制数据会进入哪个输出端。
接下来做的都是以前做过的。每个1位输入端控制两个开关,并且一次只能有一个开关开启,因此我们每组里添加一个非门保证始终一开一闭,注意不要连错:
本关最终答案
留存数据无疑需要使用延迟线,但是延迟线只能保存一刻数据,所以我们要一直刷新它。我们先构成一个循环,延迟线会一直存储数据,直到它被关闭,如下图:
我们需要一个开关来控制它何时被关闭:
当然这个开关现在起不到任何作用,我们需要把延迟线的输出值输入到开关上:
然后我们将待写入的值接入总线:
然后用一个开关来控制:
本关最终答案按
我们先制作一个可以存储8位数据的存储器。我们只有1位存储器,所以我们需要8个。将8位数据拆成8个1位数据,存储到8个存储器中:
当然,我们还需要制作输出端,将存储的8个1位数据再转化为1个8位数据:
接下来就是如何控制,它有3个要求:
我们先制作第二个。只要将输入1连接到每个1位存储器即可:
此时,将输入0连接至输出端下方即可完成一和三:
本关最终答案
本关的电路搭建特别简单,不需要过多解释,直接看图即可:
本关最终答案
本元件就相当于上面的电路,可以在两路输出中选择一路。
我们先制作第一套,此电路可以确定是不是三个红,如果是就输出到输出1:
然后制作第二套,因为真值表的第一行是绿色,所以我们不用放置非门:
然后再制作第三套,第二路是绿,因此第二路不需要非门:
像这样将所有电路全做出来,一共8套电路:
然后我们将8个电路结合起来,注意不要连错孔:
本关最终答案 方案A
这里提供一下另一种解法:
本关最终答案 方案B -小渊xyz 你可以先理解一下这种解法,我们之后在“小盒子”那关会用到。“宽带”这个名字是我取的,只是因为这个带子很宽,我不知道现实里这个东西叫什么。
我们先将指令输入端进行解码,用到我们上一关制作的3位解码器:
这样,4种指令,就分别对应解码器的前4个输出口。
我们使用8位或元件直接处理两个数据,然后将处理结果加上8位开关,与解码器输出的OR指令路连接:
现在来制作第二条指令,即按位与非,和我们之前制作的按位或和按位非的电路相似,只是把逻辑门换成了与非门,我们用1举例:
后面的也这样搭建,然后在结果路放置8位开关,让指令NAND路控制开关,将结果输出到总线:
然后制作按位或非,我们已经有按位或和按位非,把它们组合就行:
然后在结果路加开关,让NOR指令路控制,接入总线,适当调整位置节省空间:
现在我们再制作按位与的电路即可:
也是同样,加开关,让指令AND控制,接入总线:
本关最终答案 运行后发现正确无误。
我们获得了这关里制作的3个按位操作元件:
还记得我们在前讲的“宽带”吗?首先我们先将地址数据使用解码器导出成4条线路:
我们知道,用A、B、0、1可以组成4个地址,分别的 (A,0), (A,1), (B,0), (B,1),我们将这4个地址用与门判断出来:
我们在输入端设置4个8位寄存器,输出结果直接接入总线,然后输出到输出端:
接下来我们只需要做到“控制”即可。需要8个与门,空间有点小,你看怎么能摆下:
左边4个与门用于判断是否读取,我们先接入数据:
然后我们把输入1接进去,就相当于“如果收到读取的信号,就让信息通过”:
右边四个与门也类似,用于判断是否写入。先接入数据(我用的是深蓝色的线):
将输入2接入到四个与门,就相当于“如果接收到要写入的信号,就让数据通过”:
最后我们再来一条线(白线),将读取信号输入端和输出端开关连接。注意你很有可能没办法连接这条线,因为空间被填满了,你需要让其他东西“让开”。在移动其他元件时一定要将它的输入输出一起移动,不要导致断开和短路,如果出问题了可以按Ctrl+Z撤销操作。最后做出来是这样:
本关最终答案
首先我们制作一个这样的结构:
寄存器会始终把数据存储并输出,并且直接输出到输出端。到下一段后,因为有ADD在,会+1(高电平就是1),然后再输出出来,重新写入到寄存器。左侧的高电平时为了始终启用寄存器的读取和写入功能。这样,在不覆盖的状态下,寄存器会每刻都+1。
现在我们来做数据覆盖。我们只需要用到一个选通器,选择让哪个数据覆盖到寄存器即可。注意不要弄错选通器的输入端口:
本关最终答案
我们获得了8位计数器元件,其实就是我们本关制作的电路。它会每秒+1,直到有新的数据覆盖。
以下三章为《图灵完备 Turing Complete》游戏手把手教程(教程原创为知乎:淘气喵w,特此说明) 第一章:基础逻辑电路 第二章:算术运算和存储器 第三章:处理器架构