标题：C语言运算符
级别
1级（左结合）
( ) 圆括号；[ ]下标运算符；->指向结构体成员运算符；. 结构体成员运算符。 
2级（右结合） 
“ ! ”逻辑非运算符；“ ~ ”按位取反运算符；“ ++ ”前缀增量运算符；“ -- ”前缀减量运算符；
“ - ”负号运算符；(类型)类型转换运算符；“ * ”指针运算符；“ & ”地址运算符；
“sizeof ” 长度运算符。 
3级（左结合） 
“ * ” 乘法运算符；“ / ” 除法运算符；“ % ” 取余运算符。
4级（左结合）
“ + ”加法运算符；“ - ”减法运算符。 
5级（左结合） 
<< 左移运算符；>> 右移运算符。
6级（左结合） 
<、<=、>、>=关系运算符。
7级（左结合） 
“ == ”等于运算符；“ != ”不等于运算符。 
8级（左结合） 
“ & ”按位与运算符。
9级（左结合） 
“ ∧ ”按位异或运算符。 
10级（左结合） 
“ | ”按位或运算符。
11级（左结合） 
“&&”逻辑与运算符。
12级（左结合） 
“ || ”逻辑或运算符。
13级（右结合）
? :条件运算符。
14级（右结合）
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=赋值运算符。
15级（左结合）
“，” 逗号运算符。
优先级
优先级：C语言中，运算符的运算优先级共分为15 级。1 级最高，15 级最低。 在表达式中，优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时，则按运算符的结合性所规定的结合方向处理。 
结合性：C语言中各运算符的结合性分为两种，即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右，即先左后右。如有表达式x-y+z 则y 应先与“-”号结合，执行x-y 运算，然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性，应先执行y=z 再执行x=(y=z)运算。C语言运算符中有不少为右结合性，应注意区别，以避免理解错误。 
优先级从上到下依次递减，最上面具有最高的优先级，逗号操作符具有最低的优先级。
所有的优先级中，只有三个优先级是从右至左结合的，它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。
具有最高优先级的其实并不算是真正的运算符，它们算是一类特殊的操作。()是与函数相关，[]与数组相关，而－>及.是取结构成员。
其次是单目运算符，所有的单目运算符具有相同的优先级，因此在我认为的 真正的运算符中它们具有最高的优先级，又由于它们都是从右至左结合的，因此*p++与*(p++)等效是毫无疑问的。
另外在C语言里，没有前置后置之分，因为++ -- 是右结合所以右侧优先运算，表现为 "操作数后置优先级比较高" 的假象，前置和后置的区分是因为运算符重载而后加入C++的
接下来是算术运算符，*、/、%的优先级当然比+、－高了。
移位运算符紧随其后。
其次的关系运算符中，< <= > >=要比 == !=高一个级别，不大好理解。
所有的逻辑操作符都具有不同的优先级（单目运算符除外，！和~）
逻辑位操作符的"与"比"或"高，而"异或"则在它们之间。
跟在其后的&&比||高。
接下来的是条件运算符，赋值运算符及逗号运算符。
在C语言中，只有4个运算符规定了运算方向，它们是&&、| |、条件运算符及赋值运算符。
&&、| |都是先计算左边表达式的值，当左边表达式的值能确定整个表达式的值时，就不再计算右边表达式的值。如 a = 0 && b; &&运算符的左边位0，则右边表达式b就不再判断。
在条件运算符中。如a?b:c；先判断a的值，再根据a的值对b或c之中的一个进行求值。
赋值表达式则规定先对右边的表达式求值，因此使 a = b = c = 6;成为可能。
口诀注释
优先级等级口诀
圆方括号、箭头一句号， 自增自减非反负、针强地址长度，
乘除，加减，再移位，
小等大等、等等不等，
八位与，七位异，六位或，五与，四或，三疑，二赋，一真逗。
其中“，”号为一个等级分段。
优先级等级注释
“圆方括号、箭头一句号”指的是第15级的运算符。其中圆方括号很明显“（）、[]”，箭头 指的是指向结构体成员运算符“->”，句号 指的是结构体成员运算符“.” ；
“自增自减非反负、针强地址长度”指的是第14级的运算符。其中 非 指的是逻辑运算符“!”，反 指的是按位取反运算符“~”，负 指的是负号运算符“－”，针 指的是指针运算符“*”，强 指的是强制类型转换运算符，地址 指的是地址运算符“&”，长度 指的是长度运算符“sizeof ”；
“乘除，加减，再移位”移位指的是左移运算符“<<”和右移运算符“>>”，其中除法还包括了 取余运算符“%”；
“小等大等、等等不等” 指的是第10级到第9级的运算符：<、<=、>和>=，等等指的是等于运算符==，不等指的是不等于运算符!=
“八位与，七位异，六位或”其中 八位与 指的是第8级的 按位与 运算符“&”，七位异 指的是第7级的按位异或 运算符“^”，六位或 指的是第6级的按位或运算符“|”；
“五与，四或”指的是第5级、第4级的逻辑与运算符“&&”和逻辑或运算符“||”；
“三疑，二赋，一真逗”指的是第3级到第1级的运算符。其中，三疑指的是条件运算符“？：” （三有双重含义：即指优先级别是三，它的运算符类型也是三目，疑也取“?”之意），二赋 指的是赋值运算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ，一真逗 指的是第1级的“，”运算符，真字只是为了语句需要罢了。
由于C语言的运算符优先级与C++的不完全一样(主要是增加了几个运算符)，所以这个口诀不能完全实用于C++.但是应该能够兼容，大家可以比较一下他们的区别应该就能够很快掌握C++的优先级的！
应用举例
1、赋值运算符：a=5; 
a=b=0; 
第一个赋值语句把5赋给变量a；第二个赋值语句的意思是把0同时赋值给两个变量。这是因为赋值语句是从右向左运算的，也就是说从右端开始计算，先b=0，然后a=b。
2、复合赋值运算符：a=1;a+=3;
上面第二个赋值语句等价于a=a+3;即a=4。
3、算术运算符：Area=Height*Width;num=num1+num2/num3-num4; 
第一个赋值语句Height和Width相乘结果赋给变量Area；第二个赋值语句先完成num2与num3的整除运算，然后与num1相加，再减去num4，结果赋给num。运算符运算顺序先算乘除再算加减。单目正和单目负最先运算。 
4、逻辑运算符：a=1,b=1;
a||b-1; 
因为a=1为真值，所以不管b-1是不是真值，总的表达式一定为真值，这时后面的表达式就不会再计算了。
5、关系运算符：if(a>0)...
如果a>0，则执行if语句中的内容，否则退出。
6、条件运算符：a=(b>0)?b:-b; 
当b>0时，a=b；当b不大于0时，a=-b；其实上面的意思就是把b的绝对值赋值给a。
7、逗号运算符：b=2,c=7,d=5;
a=(++b,c--,d+3); 
有三个表达式，用逗号分开，所以最终的值应该是最后一个表达式的值，也就是d+3=8，所以a=8。
8、位逻辑运算符
包括：1。&位与符 2。|位或符 3。^位异或符 4。~位取反符 以操作数12为例。位运算符将数字12视为1100。位运算符将操作数视为位而不是数值。数值 可以是任意进制的：十进制、八进制或十六进制。位运算符则将操作数转化为二进制，并相应地返回1或0。 位运算符将数字视为二进制值，并按位进行相应运算，运算完成后再重新转换为数字。例如： 表达式10&15表示(1010 & 1111)，它将返回表示1010的值10。因为真真得真，或者是11得1，同位全是1结果也是1 表达式10|15表示(1010 | 1111),它将返回表示1111的值15。假假得假。全零得零。 表达式10^15表示(1010 ^ 1111), 它将返回表示0101的值5。此时是同性相斥，相同的就为假。 表达式~10表示(~1010)，它将返回表示0101的值 -11。此号好理解，按位取反。