优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。逻辑运算符中“逻辑非 !”除外。

优先级运算符描述结合性
1++ --后缀自增与自减从左到右
()函数调用
[]数组下标
.结构体与联合体成员访问
->结构体与联合体成员通过指针访问
(type){list}复合字面量(C99)
2++ --前缀自增与自减从右到左
+ -(一元)正与负,与加减不同
! ~逻辑非与逐位非
(type)转型
*间接(解引用)
&取址
sizeof取变量大小
_Alignof对齐要求(C11)
3* / %乘法、除法及余数从左到右
4+ -加法及减法
5<< >>逐位左移及右移
6< <=分别为 < 与 ≤ 的关系运算符
> >=分别为 > 与 ≥ 的关系运算符
7== !=分别为 = 与 ≠ 关系
8&逐位与、按位与
9^逐位异或(排除或)
10|逐位或(包含或)
11&&逻辑与
12| |逻辑或
13?:三元条件从右到左
14[注 4]=简单赋值
+= -=以和及差赋值
*= /= %=以积、商及余数赋值
<<= >>=以逐位左移及右移赋值
&= ^= | =以逐位与、异或及或赋值
15,逗号从左到右

单目运算符:结合性都是从右往左,优先级较高
双目运算符中只有赋值运算符的结合方向是从右往左
逗号运算符的优先级最低

拥有相同优先级的运算符以其结合性的方向绑定到其参数。 例如,表达式 a = b = c 被分析为 a = (b = c) 而非 (a = b) = c ,因为“=”是从右到左的结合性。

参考资料:
C语言运算符优先级和结合性一览表
C 运算符优先级