St=====运算符的优先级与结合律(从高到低排列)=====
优先级 名称 符号 结合性
1 数组下标 [] 左结合性
1 函数调用 () 左结合性
1 结构和联合的成员. -> 左结合性
1 自增(后缀) ++ 左结合性
1 自减(后缀) -- 左结合性
2 自增(前缀) ++ 右结合性
2 自减(前缀) -- 右结合性
2 取地址 & 右结合性
2 间接寻址 * 右结合性
2 一元正号 + 右结合性
2 一元负号 - 右结合性
2 按位求反 ~ 右结合性
2 逻辑非 ! 右结合性
2 计算内存长度 sizeof 右结合性
3 强制类型转换 () 右结合性
4 乘法类的 * / % 左结合性
5 加法类的 + - 左结合性
6 按位移位 << >> 左结合性
7 关系 < > <= >= 左结合性
8 判等 == != 左结合性
9 按位与 & 左结合性
10 按位异或 ^ 左结合性
11 按位或 | 左结合性
12 逻辑与 && 左结合性
13 逻辑或 || 左结合性
14 条件 ?: 右结合性
15 赋值 = *= /= %=右结合性
+= -= <<= >>=
&= ^= |=
16 逗号 , 左结合性
C语言运算符优先级等级口诀
[圆方括号、箭头一句号]
[自增自减非反负、针强地址长度]
[乘除,加减,再移位]
[小等大等、等等不等]
[八位与],[七位异],[六位或],[五与],[四或],[三疑],[二赋],[一真逗]
(其中“[]”号为一个等级分段)
说明:
“圆方括号、箭头一句号”
指的是第15级的运算符。其中【圆方括号】为“()、[]”,【箭头】指的是指向结构体成员运算符“->”,【句号】指的是结构体成员运算符“.”;
“自增自减非反负、针强地址长度”
指的是第14级的运算符。其中【非】指的是逻辑运算符“!”,【反】指的是按位取反运算符“~”,【负】指的是负号运算符“-”,【针】指的是指针运算符“*”,【强】指的是强制类型转换运算符,【地址】指的是地址运算符“&”,【长度】指的是长度运算符“sizeof ”;
“乘除,加减,再移位”
【移位】指的是左移运算符“<<”和右移运算符“>>”,其中【除】还包括了取余运算符“%”;
“小等大等、等等不等”
【小等大等】指的是第10级到第9级的运算符:<、<=、>和>=,【等等】指的是等于运算符“==”,【不等】指的是不等于运算符“!=”;
“八位与,七位异,六位或”
【八位与】指的是第8级的按位与运算符“&”,【七位异】指的是第7级的按位异或运算符“^”,【六位或】指的是第6级的按位或运算符“||”;
“五与,四或”
【五与】指的是第5级的逻辑与运算符“&&”,【四或】第4级和逻辑或运算符“||”;
“三疑,二赋,一真逗”
指的是第3级到第1级的运算符。其中,【三疑】指的是条件运算符“?:”(三有双重含义:即指优先级别是三,它的运算符类型也是三目,疑也取“?”之意),【二赋】指的是赋值运算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,【一真逗】指的是第1级的“,”运算符,真字只是为了语句需要罢了。
由于C语言的运算符优先级与C++的不完全一样(主要是增加了几个运算符),所以这个口诀不能完全实用于C++.但是应该能够兼容,大家可以比较一下他们的区别应该就能够很快掌握C++的优先级的!