面试经常考到运算符优先级的问题,虽然简单,但是有时间长了,经常会忘记,因此对这部分知识总结了一下。
优先级最高的运算符:
然后分别是单目运算符,双目运算符,三目运算符
单目运算符:只对一个变量进行操作
代表符号: !(逻辑非) ~(按位取反) ++(自增) –(自减)
例如:int a=1;a++;
单目运算符中谨记: - 大于 (类型) 大于 ++ 大于 – 大于 * 大于 & 大于 ! 大于 ~ 大于 sizeof
双目运算符:对两个变量进行操作
双目运算符又分为:
1.算术运算符: / * % + - « »
2.关系运算符: > >= < <= == !=
3.逻辑运算符:位(&、^)&&
三目运算符:对三个变量进行操作
赋值运算符
优先级最低运算符:逗号运算符
记忆方法如下:
记住一个最高的:构造类型的元素或成员以及小括号。
记住一个最低的:逗号运算符。
剩余的是一、二、三、赋值。
意思是单目、双目、三目和赋值运算符。
在诸多运算符中,又分为:
算术、关系、逻辑。
两种位操作运算符中,移位运算符在算术运算符后边,逻辑位运算符在逻辑运算符的前面。再细分如下:
算术运算符分 *,/,%高于+,-。
关系运算符中,〉,〉=,<,<=高于==,!=。
逻辑运算符中,除了逻辑求反(!)是单目外,逻辑与(&&)高于逻辑或(||)。
逻辑位运算符中,除了逻辑按位求反(~)外,按位与(&)高于按位半加(^),高于按位或(|)。
这样就将15种优先级都记住了,再将记忆方法总结如下:
去掉一个最高的,去掉一个最低的,剩下的是一、二、三、赋值。双目运算符中,顺序为算术、关系和逻辑,移位和逻辑位插入其中。
例子
x*=y+8 //等价于 x*=(y+8) 双目运算符大于赋值运算符
max=(a>b)?a:b // 三目运算符大于赋值运算符
c>a+b //等价于 c>(a+b) 算术运算符大于关系运算符
a>b==c //等价于 (a>b)==c 关系运算符中>大于==
*p++ //等价于 *(p++) 单目运算符中++大于*