C 中的结合性
Associativity in C
#include <stdio.h>
int main()
{
int a=10,b=20,c=30,d=40;
if(a<=b == d>c)
{
printf("true");
}
else
{
printf("false");
}
}
对于上面的代码,结合性会出现在图片中,因为 <= 和 > 运算符具有相同的优先级。
所以我可以说 (从左到右) <= 将首先被评估然后 > 在这种情况下将被评估
运算符precedence/associativity 指定哪些运算符与哪个操作数“粘合在一起”。在这种情况下,他们指定表达式应解析为 (a<=b) == (d>c)
而不是 a<= (b==d) >c
等
由于关系运算符的优先级高于相等运算符,因此结合性在这里无关紧要。只有在你写了类似 a <= b > c
.
的情况下才重要
此外,不要混淆运算符优先级和求值顺序。在这种情况下,可能首先计算 a<=b
表达式或 d>c
表达式,因为 ==
运算符未指定其操作数的计算顺序。这是未指定的行为,可能因情况而异。
详情见What is the difference between operator precedence and order of evaluation?
#include <stdio.h>
int main()
{
int a=10,b=20,c=30,d=40;
if(a<=b == d>c)
{
printf("true");
}
else
{
printf("false");
}
}
对于上面的代码,结合性会出现在图片中,因为 <= 和 > 运算符具有相同的优先级。 所以我可以说 (从左到右) <= 将首先被评估然后 > 在这种情况下将被评估
运算符precedence/associativity 指定哪些运算符与哪个操作数“粘合在一起”。在这种情况下,他们指定表达式应解析为 (a<=b) == (d>c)
而不是 a<= (b==d) >c
等
由于关系运算符的优先级高于相等运算符,因此结合性在这里无关紧要。只有在你写了类似 a <= b > c
.
此外,不要混淆运算符优先级和求值顺序。在这种情况下,可能首先计算 a<=b
表达式或 d>c
表达式,因为 ==
运算符未指定其操作数的计算顺序。这是未指定的行为,可能因情况而异。
详情见What is the difference between operator precedence and order of evaluation?