今天看到一个很有趣的东西,关于表达式优先级的问题。如下。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 int i=0; 2 int j=(i++)+(i++);
j的值是多少?
分析:编译器是从左往右编译也就是说编译器先做(i++)
1、(i++)由于是++所以这个表达式为i也就是0
2、执行上面的++运算,此时i=1
3、执行右边的(i++),同1也是返回i但是此时i是1
4、执行两个表达式中间的+操作即:0+1=1也就是说结果j=1
综上所述:++操作符在后的时候先计算表达式的值然后在执行++操作。(这里其实还涉及到一个表达式的概念)
那如果++在前呢?该是多少呢?
int i=0;
int j=(++i)+(++i);
分析:
1、(++i)由于++在前所以先执行++操作再进行表达式的计算也就是这个表达式的值为++0也就是1
2、(++i)同1但是此时的i为1所以这个表达式的值为++1=2
3、计算整个表达式的值为1+2=3
结论:1、++在前先算表达式的值再对变量执行++操作,反之则是先对变量执行++操作再算表达式的值。
2、编译器是从左到右按照优先级顺序依次进行计算的。