表达式的运算规则要解决三个问题
1,不同优先级的运算符要先算哪个?
2,相同优先级的运算符要先算哪个?
3,单个运算符怎么算?
解决方法
第一个问题好解决,优先级高的先算。
第二个问题也好解决,根据运算符的结合性,如果结合性是从左到右,那么先算左边的运算符,再算右边的运算符,反之亦然。
第三个问题要看运算符的运算对象是几个,如果是三个或两个,从左到右,如果是单个,根据运算符的功能算即可。
举个c语言的例子:
#include<stdio.h>
int main() {
int i=0;
int j=0;
printf( "!++i=%d\n" ,!++i);
printf( "!j++=%d" ,!j++);
return 0;
}
运行结果:
分析过程:
!和++这两个运算符属于同级别,它们的结合性是从右到左。
!++i的运算过程如下:
先算++i,该表达式的值为1,再算!1,结果为0;
!j++ 的运算过程如下:
先算j++,该表达式的值为0,再算!0,结果为1;
参考
C has built-in precedence and associativity of operations that determine how and in what order operations are performed.
Precedence determines which operations have a higher priority and are, therefore, performed before those with a lower priority.
Associativity refers to how operators of the same precedence are evaluated—from left to right or from right to left.
引用自《Learn C Programming》