遇到一个题x = 1 , y = 2 , z = 3,则表达式 y+=z--/++x 的值是___
竟然错了,所以来复习一下运算符的知识。
运算符优先级表
描述 | 运算符 | 结合性 |
---|---|---|
括号 | ()、[ ] 、.(点操作符) | 从左向右 |
正负号 | +、- | 从左向右 |
自增自减,非 | ++、–、! | 从左向右 |
乘除,取余 | *、/、% | 从左向右 |
加减 | +、- | 从左向右 |
移位运算 | <<、>>、>>> | 从左向右 |
大小关系 | >、>=、<、<= | 从左向右 |
相等关系 | ==、!= | 从左向右 |
按位与 | & | 从左向右 |
按位或 | l | 从左向右 |
逻辑与 | && | 从左向右 |
逻辑或 | ll | 从左向右 |
条件运算 | ?: | 从右向左 |
赋值运算 | =、+=、-=、*=、/=、%= | 从右向左 |
逗号 | , | 从左向右 |
这里涉及到几个容易混淆的点:
||和|,以及&和&&的区别
||和|,以及&与&&并没有太大的区别,
只是||和&&有短路效应。当||和&&前的表达式判断
为真时,就不再判断||和&&后面的表达式。
++、- -前后缀的区别
作用
自增或者自减,单独和操作符使用时,
放在操作数前面和后面的效果没有任何区别。
如a++和++a
区别
放在操作数的前面:先自增或者自减,再参与操作
放在操作数的后面:先参与操作,再自增或者自减
底层原理
a = a++;
int temp = a;
a++;
a = temp;
赋值运算符的小细节
赋值运算符是从右向左结合的。
赋值表达式有值的,值等于=右边表达式的值。
public static void main(String[] args) {
int a = 1;
System.out.println(a=4);
}
结果为4
所以回到题目中,应该是先算++x,然后再执行z / 2 = 1, 最后y = y + 1 = 3.