首先
了解单目运算符和双目运算符的区别就是操作数(变量或常量)数量的不同。
单目运算符只对一个操作数进行逻辑运算。
例如: num++(自加) , num--(自减) , !num(取反) , ~num(按位取反)。
双目运算符只对两个操作数进行逻辑运算。
例如: num1 + num2 , num1 - num2 , num1 > num2
PS:除了单目和双目运算符,还有一个三目运算符:
三目运算符就是对三个操作数进行逻辑运算。目前三目运算符只有一个:num = num > 4 ? 1 : 0。这段程序的意思是:如果变量num的值,大于3,那么变量num1的值就变为1,否则num的值就变为0
假设定义两个常数FLAG和flag在if语句的判断内表示如下:
If(FLAG & flag == 1)
原本想表达的意思是(FLAG & flag)的结果是否等于1,但是由于 == 的优先级比 &的高,所以意思就会变成 FLAG与(flag == 1)的逻辑与运算,在编程中虽然不会直接报错,但是会直接影响最后的运算。
其实这些优先级没有那么难记,只要恰当分组,了解每组之间的相对优先级就可以了。
- 优先级最高:数组下标、函数调用、操作符和结果成员选择符(自左向右);例:a.b.c表示(a.b).c。
- 单目运算符:因为函数调用的优先级要高于单目运算符的优先级。如果p是函数指针,必须要写:(*p)();
如果*p();的话,就是指针函数了。
- 双目运算符:在双目运算符中,算术运算符优先级最高,移位其次,后面依次是关系运算符、逻辑运算符、赋值运算符、最后条件运算符(三目运算符)。
有两个点最重要:
- 任何一个逻辑运算符的优先级都低于任何一个关系运算符。
- 移位优先级比算术高,比关系运算符低。