2016-03-07 473 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

抱歉,自從括號改變了條件以來,我認爲這讓我感到困惑。 –