0xAA55 发表于 2014-2-6 03:47:58

Minecraft原版红石电路加法器

先来一张俯视图。这就是加法器。图片下方的拉杆是信号输入。

这里是输入端,输入红石信号。高的“针脚”是第一个数字的各个二进制位,从左到右是从低位到高位。低的“针脚”是第二个数字的各个二进制位。

输出端。二进制位从右往左是低位到高位。
萤石可以把信号从下往上传输。

预进位标志引入。给这个口输入一个红石信号可以让算出的结果+1.对于80x86汇编的ADC指令就是靠的这个口了

溢出标志引出。所谓溢出标志就是在运算完所有位之后是否还有进位。

这就是加法器的“集成电路”,怎样?看起来很屌吧?

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

对比二进制加法运算:
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的与门

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

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

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

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

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

页: [1]
查看完整版本: Minecraft原版红石电路加法器