2016-03-07 477 views
0

这个问题可能看起来很不太好,但我的问题是这样的: 这两个语句在逻辑上是相同的吗?C++逻辑运算符Q

int a; 
int b; 
int c; 


if (!a && !b && !c) 
//do something 



if (!(a || b || c)) 
//do something 
+2

你在找什么为https:// EN。 wikipedia.org/wiki/De_Morgan's_laws –

回答

2

真值表对理解逻辑很有用。

#include <iostream> 

using std::cout; 
using std::endl; 

int main(void) { 
    int a; 
    int b; 
    int c; 
    bool differ = false; 

    cout << "a b c x y\n"; 
    for (a = 0; a <= 1; a++) { 
     for (b = 0; b <= 1; b++) { 
      for (c = 0; c <= 1; c++) { 
       bool x = (!a && !b && !c); 
       bool y = (!(a || b || c)); 
       differ = differ || (x != y); 
       cout << a << " " << b << " " << c << " " << x << " " << y << "\n"; 
      } 
     } 
    } 
    if (differ) { 
     cout << "they differ" << endl; 
    } else { 
     cout << "they are the same" << endl; 
    } 
    return 0; 
} 

其实他们是同一感谢德摩根定律:

!a && !b && !c 
= !(a || b) && !c 
= !((a || b) || c) 
= !(a || b || c) 

=这里是不是C++赋值运算符)

+0

谢谢你的谢意! – FinalFantasyFan

-1

不需要。在您的第一条语句中,必须满足所有条件。 & &运营商手段所有应该是真实的,以使结果为真,否则将是错误的。在你的第二个陈述中,如果一个或多个条件成立,那么条件就完成了。

对不起,很简单的解释。

+0

您需要查看[de Morgan的法律](https://en.wikipedia.org/wiki/De_Morgan's_laws)。 – EJP

+1

抱歉,自从括号改变了条件以来,我认为这让我感到困惑。 –