单目运算符优先级最高,但是单目又分为两个级别:
最高优先级
结合性都是L-R
聚组 ()
函数调用 ()
下标引用 []
访问结构成员 .
访问结构指针成员 ->
后缀自增 lexp++
后缀自减 lexp--
第二优先级
结合性都是R-L
逻辑反 !
按位取反 ~
正值 +
负值 -
前缀自增 ++lexp
前缀自减 --lexp
间接访问 *rexp
取地址 &lexp
在这里,通常有人迷惑*p++的结果。因为后缀自增优先级高于间接访问,因此其等效于*(p++)。这里因为优先级上有差异,因此不必考虑结合性。
示例:
char text[32] = "XYBCDCBABABA";
char* p1 = text;
cout << *p1++ << *++p1 << ++*p1 << endl;
第三优先级
乘法 *
除法 /
整数求余 %
第四优先级
加法 +
减法 -
第五优先级
移位运算符 >> <<
第六优先级
关系运算符 > >= < <=
第七优先级
关系运算符 == !=
示例:
cout << (1 == 6 >= 5) << endl; 结果输出1
第八优先级
位运算 & ^ |
第九优先级
逻辑运算符 && || (&& 大于 ||)
第十优先级
条件运算符
? "
第十一优先级
赋值关系,包括复合赋值
第十二优先级
逗号 ,
参考资料
1. C和指针 第五章