电路中的逻辑门

时间:2015-04-10 17:27:37

标签: java arraylist enums

所以,在逻辑电路的XOR Gate中:

  • 如果all输入信号为01,则输出为0;
  • 如果输入的信号是混合的,例如1110001111,则输出为1;

但是

  • 如果我们有信号0X(未知信号),则输出为X;
  • 1X时,输出应为X

我在方法代码中有一个错误,因为当我们在门口输入1111100001信号时,我得到0而不是1。如果输入为000000011111,我该如何处理?注意:Signal.HI1Signal.LO0Signal.XX

如果需要更多信息,请与我们联系。

@Override
public boolean propagate() 
{
    Signal inputSignal;
    Signal tempSignal;
    Signal temp = getOutput().getSignal();
    List<Wire> inputs = getInputs();
    Signal result = Signal.LO;
    tempSignal = inputs.get(1).getSignal();

    for(int i = 0; i < inputs.size(); i++)
    {

        inputSignal = inputs.get(i).getSignal();
        //tempSignal = inputs.get(0).getSignal();

        if(inputSignal != tempSignal)
            getOutput().setSignal(Signal.HI);

        else if(inputSignal == tempSignal)
            getOutput().setSignal(result);


        /*else if((inputSignal == Signal.LO) && (tempSignal == Signal.LO))
            getOutput().setSignal(result);*/

        else if(inputSignal == Signal.X)
        {
            result = inputSignal;
            getOutput().setSignal(result);
            break;
        }
        else            
            getOutput().setSignal(Signal.HI);
.............................................

2 个答案:

答案 0 :(得分:0)

我会使用3个布尔变量:

  • hasX:如果符合X,则为true
  • hasLO:如果符合LO,则为true
  • hasHI:如果符合HI,则为true

然后遍历输入,并根据当前元素的值设置其中一个变量。如果在值更新后,hasX为真,则可以跳出循环:结果为X.如果不是,则继续。

循环之后,如果hasLO和hasHI都为真,则返回1。否则,返回0。

答案 1 :(得分:0)

这样可能会更简单一些:

public Signal propagate() {
      Signal inputSignal;
      Signal tempSignal;
      Signal temp = getOutput().getSignal();
      List<Wire> inputs = getInputs();
      Signal result = Signal.LO;
      tempSignal = inputs.get(1).getSignal();

      //count number of HI, LO and X-Inputs
      int hi = 0;
      int lo = 0;
      int x = 0;
      for(Signal s : inputs)
          switch(s){
               case Signal.HI:
                    hi += 1;
                    break;
               case Signal.LO:
                    lo += 1;
                    break
          }

     x = inputs.size() - (hi + lo);

     if(x == 0)
          if((hi % 2) == 1)//XOR is HI for an uneven number of HI inputs
               return Signal.HI;
          else
               return Signal.LO;
      else
          return Signal.X;//atleast one x -> unknown result
}

虽然我没有完全明白XOR的定义。但它可能有所帮助。