C编译器如何理解if-else语句中编写的以下关系表达式?
How the following relational expression written in if-else statement is understood by the C Compiler?
我不明白为什么这段代码输出的是 20 30 40。谁能解释一下写在if语句中的关系表达式是如何被C编译器理解的?
This is the image of code of the C Program
#include <stdio.h>
int main()
{
int i = 20, j = 30, k = 40;
if (i > j == k)
{
printf("%d %d %d ",--i,j++,++k);
}
else
{
printf("%d %d %d ",i,j,k );
}
return 0;
}
输出:
20 30 40
根据operator precedence i > j == k
执行为(i > j) == k
所以先执行i > j
,返回一个布尔值(这里是false
,即0
)
结果与 k
比较,不等于 0
。条件不为假,所以 else
部分条件被执行
首先要考虑的是运算符优先级。运算符 > 在运算符 == 之前进行评估,它 returns 是一个值。在这种情况下,i > j 是错误的,因此它 returns 为零。然后它检查零是否等于 k,即 40 而不是。所以它转到其他分支。
我不明白为什么这段代码输出的是 20 30 40。谁能解释一下写在if语句中的关系表达式是如何被C编译器理解的?
This is the image of code of the C Program
#include <stdio.h>
int main()
{
int i = 20, j = 30, k = 40;
if (i > j == k)
{
printf("%d %d %d ",--i,j++,++k);
}
else
{
printf("%d %d %d ",i,j,k );
}
return 0;
}
输出:
20 30 40
根据operator precedence i > j == k
执行为(i > j) == k
所以先执行i > j
,返回一个布尔值(这里是false
,即0
)
结果与 k
比较,不等于 0
。条件不为假,所以 else
部分条件被执行
首先要考虑的是运算符优先级。运算符 > 在运算符 == 之前进行评估,它 returns 是一个值。在这种情况下,i > j 是错误的,因此它 returns 为零。然后它检查零是否等于 k,即 40 而不是。所以它转到其他分支。