2012-12-27 89 views
0
A && B || C && D 

(A && B) || (C && D) 

在C++中都是布爾邏輯相等嗎?我很困惑。布爾邏輯都是布爾邏輯相等

+0

請先搜索。這裏的關鍵字是「C++」和「布爾運算符」。另一個有用的詞是「優先」。在線應該不缺少有用的信息。 (隨機第一擊:http://www.cplusplus.com/doc/tutorial/operators/) – 2012-12-27 21:10:13

回答

4

它們是否相等完全取決於您如何定義運算符優先級。如果&&優先於||,那麼是的。否則,不。

+0

在C++中如何? – retide

+2

@retide搜索「C++運算符優先級」。轉移問題! – 2012-12-27 21:07:31

+0

@pst擁有* right *的答案,但我相信在這裏很快會有其他答案,爲你填寫C++特有的信息。 –

2

在大多數編程語言中,您會發現運算符&&的優先級高於||。 因此,例如用Java,C#,C,C++,Python和Ruby等

A && B || C && D 

相當於

(A && B) || (C && D) 

你甚至可以複製粘貼代碼:

#include <iostream> 
using namespace std; 

int main() { 
     bool A = false; 
     bool B = false; 
     bool C = true; 
     bool D = true; 
     for(int i = 0; i < 2; ++i) { 
      A = (i == 0); 
      for(int j = 0; j < 2; ++j) { 
       B = (j == 0); 
       for(int k = 0; k < 2; ++k) { 
        C = (k == 0); 
        for(int l = 0; l < 2; ++l) { 
         D = (l == 0); 
         cout << A << " " << B << " " << C << " " << D << " -> "; 
         cout << ((A && B || C && D) == ((A && B) || (C && D))) << endl; 
        } 
       } 
      } 
     } 
     return 0; 
} 

Ideone找出你自己。以C++爲例,輸出爲:

1 1 1 1 -> 1 
1 1 1 0 -> 1 
1 1 0 1 -> 1 
1 1 0 0 -> 1 
1 0 1 1 -> 1 
1 0 1 0 -> 1 
1 0 0 1 -> 1 
1 0 0 0 -> 1 
0 1 1 1 -> 1 
0 1 1 0 -> 1 
0 1 0 1 -> 1 
0 1 0 0 -> 1 
0 0 1 1 -> 1 
0 0 1 0 -> 1 
0 0 0 1 -> 1 
0 0 0 0 -> 1 

所以((A && B || C && D) == ((A && B) || (C && D)))是一種重言式。

0

雖然最後的答案轉到你問有關C++語言的細節,這裏的一些深思,爲什麼(以及可能如何)記住:

連詞(AND,& &)經常與乘法有關,而析取(OR,||)通常與加法相關(我們通常知道乘法與加法的優先級)。

下面是http://www.ocf.berkeley.edu/~fricke/projects/quinto/dnf.html報價:

...作爲一個實際問題,我們與 乘法和脫節與另外平時助理一起。事實上,如果我們將1確定爲 ,將0確定爲假,則{0,1}與在大小爲2的伽羅瓦域(例如,算術模2)上的加法和乘法的定義相結合,然後加(+ )和 (或)的分離實際上是相同的,正如乘法和連接(和)一樣。 ...

從相當籠統的角度講,計算機語言傾向於尊重乘法運算符優於加法運算符。

(此外,這些關聯,例如,在邏輯和代數再次發生在其他領域,例如類型的系統。對於一個有趣的論述,請參閱http://blog.lab49.com/archives/3011代數型系統的概念。運營商之間)