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)
未被评估。
嗨,我正在学习 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)
未被评估。