作为世界上销量最高的游戏之一,minecraft有无数种出名的玩法。最为人津津乐道的玩法之一就是用红石电路。其在保留逻辑电路基本原理的情况下简化了操作并极大降低了制作门槛,允许玩家像搭积木一样搭器件。
你是否曾好奇过现代计算机是如何工作的?如果想要清晰的了解计算机工作的底层原理,亲手搭建可运行的CPU无疑是一种极佳的方式。这篇博文将分四章,通过一步步的步骤分解和原理解释,来帮助读者造出真正可工作的红石计算机。
计算机的组成
在建造一台计算机之前,我们需要首先知道计算机是由哪些部分构成的。一台计算机有五大基本组成部分:运算器,控制器,存储器,输入设备以及输出设备。
以一个简单的数学问题为例,假设我们的计算机要将两个数相加并打印。首先输入设备输入这三个数,将它们放到存储器里;其次调用运算器从存储器中获取这两个数,相加并将结果存回存储器。最后调用输出设备,输出设备打印存储器中的数。在整个过程中控制器负责依次让各个元器件工作,并调控数据去哪里。
然而控制器和运算器并不像人一样有意识,他们运作的方式仅仅是最简单的物理规律罢了。为了了解这一点,让我们先将问题简化,再简化,一直到不能再简单为止——二进制。
二进制 – 一切的开始的开始
物理世界中0和1是很简单的东西。我们可以用高电压代表开,或者1,低电压代表关,或者0。我们可以用开关控制电路的通断。
就像十进制一样,二进制一样可以表示数。十进制中如果一个数比最大的9还大,我们就把上一位合起来写到下一位去,写作10。二进制也一样,如果只有0和1两个数,第三个数我们就进一位写到下一位去。
要理解进制到底代表什么,不妨先从我们的十进制入手。用712这个数举例,百位代表这个数有多少个100,十位代表这个数有多少个10。10个10就是100,10个(10个10)就是1000。或者我们可以换种写法:10^2是100,10^3是1000。
所以,十进制712相当于7个10^2,1个10^1,再加上2。
二进制也一样。二进制1011的十位代表有多少个2,百位代表有多少个(2个2),千位代表有多少个(2个(2个2))。
好绕啊,我不想套娃,那还是用幂吧。二进制的十位代表有几个2^1,百位代表有几个2^2,千位代表有几个2^3。那怎么把二进制转为十进制呢?
So easy! 那么怎么从十进制转二进制呢?
将十进制数不停的除以2直到除完,过程中产生的余数排列在一起就可以啦!很简单有没有。好奇的读者可以停下来了思考一下原理。
怎样快捷的进行进制转换?在win10操作系统中打开计算器,切换到“程序员”一档就可以了。
逻辑门和布尔运算
学会表示数后,让我们尝试着算点东西!假设1是真,0是假,那我们可以有以下几种运算:
非运算:用 ! A表示。!1=0,! 0=1。总是反过来就对了。
与运算:用A∧B表示。必须A与B都是1,结果才是1,否则就是0。
或运算:用A∨B表示。A或B是1,结果就是1。
让我们试试用表格表示运算的结果。让我们用A,B表示输入,C表示输出。我们管这样的表格叫真值表。
例如,与门的真值表是这样的:
A | B | C |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
如何在Minecraft中使用这些逻辑门呢?我们需要用到神奇的红石火把!亮起的红石火把在被红石线,拉杆等电源充能时会熄灭。因此我们可以搭建一个非门,如图:
同样的,我们也可以搭建与门和或门。想一想它们是如何工作的。
逻辑门的种类可能有很多,但大部分都基于以上三种最基本的-非门,与门和或门。一个例子是或非门。或非门只有在两个输入都为假时输出才是真,它实际上就是对或运算的输出结果取反,也就是一个或门后面接了一个非门!与非门的输出结果则与与门完全相反——只要在与门后面接一个非门就可以实现了。
下方的表格列出了逻辑门种类和它们功能的描述。头两行是所有可能的输入组合,下方是对应逻辑门在对应输入组合时的输出情况。你可以点击超链接前往wiki阅读该逻辑门的详细介绍,以及在游戏中的制作方法。
不要被这个长长的列表吓到,大部分时候最常见的三种逻辑门就够用了。
A输入 | 开 | 开 | 关 | 关 | 对应语言表述 |
---|---|---|---|---|---|
B输入 | 开 | 关 | 开 | 关 | |
非A | 关 | 关 | 开 | 开 | A为0吗? |
A或B | 开 | 开 | 开 | 关 | 有输入为1吗? |
A或非B | 关 | 关 | 关 | 开 | 两个输入均为0吗? |
A与B | 开 | 关 | 关 | 关 | 两个输入均为1吗? |
A与非B | 关 | 开 | 开 | 开 | 有输入为0吗? |
A异或B | 关 | 开 | 开 | 关 | 两个输入不同吗? |
A同或B | 开 | 关 | 关 | 开 | 两个输入相同吗? |
A蕴含B | 开 | 关 | 开 | 开 | 如果A为1,B也为1吗? |
如果不会搭,可以参考上面表格中的链接。Wiki给出了相当详细的图纸和解释!
评论