这个问题可能看起来很不太好,但我的问题是这样的: 这两个语句在逻辑上是相同的吗?C++逻辑运算符Q
int a;
int b;
int c;
if (!a && !b && !c)
//do something
if (!(a || b || c))
//do something
这个问题可能看起来很不太好,但我的问题是这样的: 这两个语句在逻辑上是相同的吗?C++逻辑运算符Q
int a;
int b;
int c;
if (!a && !b && !c)
//do something
if (!(a || b || c))
//do something
真值表对理解逻辑很有用。
#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++赋值运算符)
谢谢你的谢意! – FinalFantasyFan
不需要。在您的第一条语句中,必须满足所有条件。 & &运营商手段所有应该是真实的,以使结果为真,否则将是错误的。在你的第二个陈述中,如果一个或多个条件成立,那么条件就完成了。
对不起,很简单的解释。
您需要查看[de Morgan的法律](https://en.wikipedia.org/wiki/De_Morgan's_laws)。 – EJP
抱歉,自从括号改变了条件以来,我认为这让我感到困惑。 –
你在找什么为https:// EN。 wikipedia.org/wiki/De_Morgan's_laws –