因此,在逻辑电路的XOR Gate中:
all为0或1,则输出为0;1110001111,则输出为1;但
0和X(未知信号),则输出为X;1和X时,输出应该是X。我在方法代码中有一个bug,因为当,假设1111100001信号被输入到门中时,我得到的是0而不是1。如果输入是0000000还是11111,我应该如何处理?注:Signal.HI是1,Signal.LO是0,Signal.X是X。
如果需要更多的信息,请告诉我。
@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);
.............................................发布于 2015-04-10 17:40:18
我将使用3个布尔变量:
然后循环输入,并根据当前元素的值设置变量之一。如果在更新了值之后,hasX为true,则可以脱离循环:结果是X。如果不是,则继续。
循环结束后,如果hasLO和hasHI都为true,则返回1。否则,返回0。
发布于 2015-04-10 17:58:41
这样可能会更简单一些:
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
}虽然我还没有完全理解你对异或的定义。但这可能会有帮助。
https://stackoverflow.com/questions/29567328
复制相似问题