第1优先级:各种括号,如()、[]等、成员运算符 . ;
第2优先级:所有单目运算符,如++、–、!、~等;
第3优先级:乘法运算符*、除法运算符/、求余运算符%;
第4优先级:加法运算符+、减法运算符-;
第5优先级:移位运算符<<、>>;
第6优先级:大于运算符>、大于等于运算符>=、小于运算符<、小于等于运算符<=;
第7优先级:等于运算符==、不等于运算符!=;
第8优先级:按位与运算符&;
第9优先级:按位异或运算符^;
第10优先级:按位或运算符|;
第11优先级:逻辑与运算符&&;
第12优先级:逻辑或运算符||;
第13优先级:三目条件运算符 ?: ;
第14优先级:各种赋值运算符,如=、+=、-=、*=、/= 等;
第15优先级:逗号运算, 。
注意总结:
1、优先级最高的是:并非真正意义上的运算符,而是数组下标、函数调用。
2、单目运算符,所以对于*p(),先结合的是函数调用。
3、双目运算符,,算术运算符优先级最高,移位运算符(<<)、位运算(&)、关系运算符(>)、逻辑运算符(&&)、条件运算符、赋值运算符。
4、任何一个逻辑运算符的优先级低于任何一个关系运算符。
5、移位运算符在算术运算符和关系运算符之间。
6、关系运算符中,==和!=的优先级要低于其他关系运算符的优先级。
7、先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7.
8、++,优先级高于算术运算符。例如,*string++,是提取了string指针指向的值,然后string=string+1。
9、对于*p->c.b的优先级:指针访问->强于结构访问.强于指针元素访问*。同样将符号*,换成取址符号&,是同样的结果。
10、指针最优,单目运算优于双目运算。如正负号。
*p++ 先取指针的内容然后增加地址;*++p则是先增加地址++,再*(取出地址中的值);
11.== !=等优先级高于&,注意位判断括号不能省略 if( (Flag&0x01) != 0)
————————————————
https://blog.csdn.net/zhang_yin_liang/article/details/52105857
https://blog.csdn.net/oqqHuTu12345678/article/details/69556263