C语言运算符的优先级

priority of operators in C language

嗨,我正在学习 C 语言,我了解到 () 在 C 中比 && 具有更高的优先级, 但是当我执行下面的程序时,a gard 它是有价值的,尽管它已经放在 () 之间,请问我能得到任何解释吗?

#include<stdio.h>
int main()
{
    int a,b;
    a=2,b=4;
    printf("%d\n",0&&(a=b));
    printf("%d",a);
    return 0;
}

因为当最左边的逻辑语句&&为假时,最右边的语句就不会是calculated\executed。

&&|| 运算符都是 短路 - 也就是说,如果可以从左操作数确定表达式的值,那么右边的操作数根本不会被求值。

给定表达式 a && b,如果 a 的计算结果为 0(假),则整个表达式的值将为假 不管 b 的值,因此未计算 b

给定表达式 a || b,如果 a 的计算结果为非零(真),则整个表达式的值为真 (1) regardless b 的值,因此 b 未计算。

在您的示例中,0 && (a=b),左操作数是 0,因此无论 (a=b) 发生什么情况,表达式的计算结果都将是 0(假),所以 (a=b) 未被评估。