所以,在逻辑电路的XOR Gate
中:
all
输入信号为0
或1
,则输出为0
; 1110001111
,则输出为1
; 但是
0
和X
(未知信号),则输出为X
; 1
和X
时,输出应为X
。 我在方法代码中有一个错误,因为当我们在门口输入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);
.............................................
答案 0 :(得分:0)
我会使用3个布尔变量:
然后遍历输入,并根据当前元素的值设置其中一个变量。如果在值更新后,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的定义。但它可能有所帮助。