minecraftpe吧 关注:638,758贴子:15,084,600

回复:【教程】DigitalCraft数字电路js教程

只看楼主收藏回复

如图所示这样搭造。
A1是数A的最低位以此类推。最左边的全加器其实可以用半加器代替,因为低位没有进位(画叉的地方)。右边可以无限接下去。在本图中,二进制数A3A2A1+B3B2B1=C3S3S2S1


IP属地:上海来自Android客户端123楼2015-08-09 16:53
收起回复
    让我们来看看mcpe里面怎么做。先摆成这样,接好输入和输出。注意电线不要弄混了。


    IP属地:上海来自Android客户端124楼2015-08-09 17:03
    回复
      最右边是最低位,把最右边的全加器进位端接到右边第二个全加器的输入端。


      IP属地:上海来自Android客户端125楼2015-08-09 17:05
      回复
        所有全加器如法炮制。注意导线。最左边的全加器的进位端是输出的最高位。



        IP属地:上海来自Android客户端126楼2015-08-09 17:06
        回复
          那么每一排开关就是一个4位的二进制数,最右边是最低位。我们验证一下,1111+1111=11110对了!


          IP属地:上海来自Android客户端127楼2015-08-09 17:09
          收起回复
            接下来是二进制减法器。
            难道减法器也要做个什么全减器?没必要。我们来研究一下减法计算的性质。


            IP属地:上海来自Android客户端128楼2015-08-09 17:13
            回复
              学校里老师总是强调,减法是加法的逆运算,正巧,数电里面的减法也是用加法器改装完成的。
              二进制人工算,也是用借位的方法算的,比如说100-11=20-11=10-1=2-1=1,我们这里用2来表示从上一位借下来的,但2是不准出现在二进制里面的。但是这个方法用在数电里面将不胜其烦。
              我们先看看十进制的减法。
              12-3=12+(10-3)-10=12+7-10=19-10=9
              可能你们会说,这过程有什么意义。请注意看,我用10减去减数3,然后用被减数加上它,结果的个位就是答案。
              再看112-35=112-(100-35)-100=112+65-100=177-100=77
              显然,最后-100那一步非常简单,就是抹掉177最左边的那个1。关键问题是怎么计算100-35,而在二进制中非常方便!


              IP属地:上海来自Android客户端129楼2015-08-09 17:27
              回复
                反码
                反码的概念非常简单,就是把一个二进制的数的每一位都取反。比如1001的反码就是0110。不过如果我把原数写成0001001,反码就变成了1110110。这个位数跟我们研究的问题有关,一般来说,要不小于被减数和减数的位数。
                看看一个数和它的反码的和,1001+0110=1111,0001001+1110110=1111111。注意到了么,全是1!如果我们再加一,就变成了10000和10000000!


                IP属地:上海来自Android客户端130楼2015-08-09 17:44
                回复
                  补码
                  补码也很简单,就是一个二进制数的补码加1。1001的补码就是0111。补码和原数加起来,一定是1000...000这样的,恰好就和我们之前研究的十进制对减数的操作相同了。
                  那么我们用这种方法计算一下二进制
                  10100-1001=10100+(10000-1001)-10000=10100+111(即1001的补码)-10000=11011-10000=1011。
                  这么一看,问题就很简单了,要求被减数减减数,把减数取补码,算被减数加减数,再抹去最左边的1,就是答案!


                  IP属地:上海来自Android客户端131楼2015-08-09 17:49
                  收起回复
                    负数情况
                    如果被减数小于减数,减出来是负数,就比较麻烦了。例如1001-1100=-11
                    用之前的方法算:
                    1001-1100=1001+100-10000=1101-10000,1101抹掉最左边的1显然不对。
                    那么设正确的结果-x=1101-10000(x>0),10000=1101+x,那么x和1101互成补码!!!
                    综上所述:求n位数A减n位数B,计算A+B的补码,结果如果是n+1位,抹去最左边的1就是答案;结果如果不到n+1位,对结果取补码,加负号,答案就是它!


                    IP属地:上海来自Android客户端132楼2015-08-09 17:58
                    回复
                      接下来,我们把负数的情况考虑进去。稍微有点麻烦。(这是我的方法,不一定最好,大家可以自己改造)
                      首先这样放。最左边的绿色输出表示负号,前面的数据选择器选择是直接输出正数还是取补码输出负数,前面的四个全加器准备计算补码。


                      IP属地:上海来自Android客户端134楼2015-08-10 09:48
                      收起回复
                        现在,我们把数据选择器的控制端连起来,因为是一起控制的嘛。
                        先放好紧挨着数据选择器的电线。
                        然后,我们钻到下面去,用两个非门的中继器,连接控制端,因为两种导线不能直接互相传导嘛。
                        然后把所有的控制端都连起来。




                        IP属地:上海来自Android客户端135楼2015-08-10 09:53
                        回复
                          接着,把管负号的那线,接上来,数据选择器的控制端就接好了。注意,不要弄反了数据选择器的功能哦!



                          IP属地:上海来自Android客户端136楼2015-08-10 09:54
                          收起回复
                            最后一步,把数据选择器的另一个输入连上去。
                            我们把取补码之前的那个输出连到数据选择器的右边输入。注意电线不要错接!4条线都要连对!




                            IP属地:上海来自Android客户端138楼2015-08-10 10:01
                            回复
                              这样,带负数的二进制减法器就大功告成了!
                              我们来验算一下
                              1010-111=11√
                              1100-101=111√
                              1010-1101=-11√
                              100-1010=-110√
                              是不是很有成就感!





                              IP属地:上海来自Android客户端139楼2015-08-10 10:08
                              收起回复