坚持简单的愚蠢的C / C ++逻辑语句

时间:2016-04-19 22:44:23

标签: c boolean-logic

我有两个开关,在我移动到程序的下一部分之前都需要激活。 通常,任何一个开关都可以打开或关闭。我希望在两个交换机都参与之前运行一个流程。 我似乎无法概念化编写此语句所需的逻辑。

我可以使用两个语句来做我想要的事情,例如:

Start_Process();

while(!sw1){    
    READ_SWITCHES();
    delay();
}

while(!sw2){    
    READ_SWITCHES();
    delay();
}

End_Process();

但我相信有更好的方法可以做到这一点。 到目前为止,我最好的猜测是:

while(!(sw1 || sw2)){    
    READ_SWITCHES();
    delay();
}

但我不相信这是正确的。

由于某种原因,这看起来也不正确。

while(!sw1 && !sw2){
    READ_SWITCHES();
    delay();
}

我做了比这更复杂的逻辑语句,但出于某种原因,我没有看到我的方式通过这个简单的陈述。 感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:4)

您需要一个evalualtes到"example" 的表达式,直到truesw1中的一个或两个变量为sw2。 试试这个

false

OR

while(!sw1 || !sw2) {

    READ_SWITCHES();
    delay();
}

请记住,根据De-Morgan定律,表达式while(!(sw1 && sw2)) { READ_SWITCHES(); delay(); } !(sw1 && sw2)是等效的。

答案 1 :(得分:3)

你想要一个OR语句:

while(!sw1 || !sw2){

    READ_SWITCHES();
    delay();
}

所以这将运行直到BOTH变为非零(即两个标志都已设置)

答案 2 :(得分:2)

在这些情况下,我总能找到真值表。

Input      Ouptut
SW1  SW2   READ_SWITCHES?
F    F     T
F    T     T
T    F     T
T    T     F 

然后尝试发现模式,在这种情况下它与AND逻辑相反:

!(SW1 && SW2)