minecraftpe吧 关注:638,610贴子:15,084,561

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

取消只看楼主收藏回复

接下来,我们就可以用全加器造二进制计算的部分。当然,还是从简单开始,先来加法


IP属地:上海来自Android客户端122楼2015-08-09 16:45
回复
    如图所示这样搭造。
    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
                              回复