首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电路逻辑门

电路逻辑门
EN

Stack Overflow用户
提问于 2015-04-10 17:27:37
回答 2查看 581关注 0票数 0

因此,在逻辑电路的XOR Gate中:

  • 如果输入信号的all01,则输出为0
  • 如果输入信号是混合的,如1110001111,则输出为1

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

我在方法代码中有一个bug,因为当,假设1111100001信号被输入到门中时,我得到的是0而不是1。如果输入是0000000还是11111,我应该如何处理?注:Signal.HI1Signal.LO0Signal.XX

如果需要更多的信息,请告诉我。

代码语言:javascript
复制
@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);
.............................................
EN

回答 2

Stack Overflow用户

发布于 2015-04-10 17:40:18

我将使用3个布尔变量:

  • hasX:如果满足X,则为真
  • hasLO:如果遇到了LO,则为真
  • hasHI:如果已满足HI,则为真

然后循环输入,并根据当前元素的值设置变量之一。如果在更新了值之后,hasX为true,则可以脱离循环:结果是X。如果不是,则继续。

循环结束后,如果hasLO和hasHI都为true,则返回1。否则,返回0。

票数 0
EN

Stack Overflow用户

发布于 2015-04-10 17:58:41

这样可能会更简单一些:

代码语言:javascript
复制
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
}

虽然我还没有完全理解你对异或的定义。但这可能会有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29567328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档