2012-12-27 93 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代数型系统的概念。运营商之间)