C++ 逻辑运算符 Q
C++ logical operator Q
这个问题可能看起来很菜鸟,但我的问题是:
这两个说法在逻辑上是一样的吗?
int a;
int b;
int c;
if (!a && !b && !c)
//do something
if (!(a || b || c))
//do something
没有。在您的第一份声明中,必须满足所有条件。 && 运算符意味着 All 应该为真才能使结果为真,否则将为假。在您的第二个陈述中,如果一个或多个条件为真,则该条件将完成。
抱歉,您的解释非常简短。
一个真理table对理解逻辑很有用。
#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++的赋值运算符)
这个问题可能看起来很菜鸟,但我的问题是: 这两个说法在逻辑上是一样的吗?
int a;
int b;
int c;
if (!a && !b && !c)
//do something
if (!(a || b || c))
//do something
没有。在您的第一份声明中,必须满足所有条件。 && 运算符意味着 All 应该为真才能使结果为真,否则将为假。在您的第二个陈述中,如果一个或多个条件为真,则该条件将完成。
抱歉,您的解释非常简短。
一个真理table对理解逻辑很有用。
#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++的赋值运算符)