【问题标题】:C++ logical operator QC++ 逻辑运算符 Q
【发布时间】:2016-03-07 02:11:19
【问题描述】:

这个问题可能看起来很无聊,但我的问题是: 这两个语句在逻辑上是否相同?

int a;
int b;
int c;


if (!a && !b && !c)
//do something



if (!(a || b || c))
//do something

【问题讨论】:

标签: c++ logic


【解决方案1】:

真值表有助于理解逻辑。

#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++赋值运算符)

【讨论】:

    【解决方案2】:

    没有。在您的第一个语句中,必须满足所有条件。 && 运算符意味着 All 应该为 true 以使结果为 true,否则将为 false。在您的第二个陈述中,如果一个或多个条件为真,则该条件将完成。

    抱歉,您的解释非常简短。

    【讨论】:

    • 您需要查找de Morgan's laws
    • 对不起,我认为这让我感到困惑,因为括号改变了条件。
    猜你喜欢
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多