这个基于布尔的 C 编程问题有什么问题吗?

Are there any problems with this Boolean based C programming question?

我目前正在学习布尔数据类型,我想知道 if-else 语句中的条件是否完整...

#include <stdio.h>
#include <stdbool.h>
int main() {
    bool a = false, b = false, c = false , d = false;
    if ((a&&b)||(!c&&d)) {
        if(((a||!b)&&c)||(b&&!a)) {
            printf("1");
        } else if ((a||(d&&b))&& !b) {
            printf("2");
        } else {
            printf("3");
        }
    } else {
        if(!(d&&c)&&(!a)) {
            printf("4");
        } else {
            printf("5");
        }
    }
    return 0;
}

if-else语句中的条件不应该有比较吗?例如 (a&&b)==true || (!c&&d)==true。 运行 程序原样输出“4”,我对原因有点困惑。谢谢

为了理解代码是如何执行并给出最终结果的,关键是理解运算符的优先级。

三个逻辑运算符中,即逻辑非!逻辑与&&logic or ||, logic not ! 优先级最高, 然后logic and && 然后是 逻辑或 ||

逻辑 not ! 的优先级高于 logic and && and logic or ||,所以 a&&b!c&&d 的计算结果都是 false.

因为 (a&&b)||(!c&&d) 的计算结果为 false,外部 if 主体不会执行。

现在,它进入了外部 else 部分。

d&&c 的计算结果为假,因为 dc 都是假的。结果,!(d&&c) 的计算结果为真。当然 not a !a 也计算为 true。

最后,!(d&&c)&&(!a)是真的。所以 printf("4"); 执行并输出一个 4