找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 4732|回复: 0

Minecraft原版红石电路加法器

[复制链接]
发表于 2014-2-6 03:47:58 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
先来一张俯视图。这就是加法器。图片下方的拉杆是信号输入。
MC1.jpg
这里是输入端,输入红石信号。高的“针脚”是第一个数字的各个二进制位,从左到右是从低位到高位。低的“针脚”是第二个数字的各个二进制位。
MC2.jpg
输出端。二进制位从右往左是低位到高位。
萤石可以把信号从下往上传输。

MC3.jpg
预进位标志引入。给这个口输入一个红石信号可以让算出的结果+1.对于80x86汇编的ADC指令就是靠的这个口了
MC4.jpg
溢出标志引出。所谓溢出标志就是在运算完所有位之后是否还有进位。
MC5.jpg
这就是加法器的“集成电路”,怎样?看起来很屌吧?

对于单个位的运算,直接的运算结果就是输入的两个信号进行异或运算,如下所示:
0异或0=0
0异或1=1
1异或0=1
1异或1=0
下图是Minecraft的异或门

MC6.jpg
对比二进制加法运算:
0+0=0
0+1=1
1+0=1
1+1=10
不考虑进位的话,结果是一样的。而判断有无进位的方法是用与运算判断。
0与0=0
0与1=0
1与0=0
1与1=1
下图是Minecraft的与门

MC7.jpg
可以看出用与运算判断是否进位是正确的思路。
下图是Minecraft中的单个位的加法运算器,左下的输出口是运算后的位值,左上的输出口是运算后的进位标志。右边两个口是数字输入。

MC8.jpg
而对于多个二进制位的连续运算则需要考虑到进位的运算,有如下公式:

结果位=(操作数1异或操作数2)异或当前进位
下一个位的进位=(操作数1与操作数2)或((操作数1与操作数2)与当前进位)

然后对每个位进行这样的逻辑运算就能实现加法的效果。

最后来上一张图,基础的基础,非门。

MC9.jpg
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-22 13:13 , Processed in 0.038128 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表