C语言中的运算符优先级决定了在没有括号的情况下,表达式中的各个部分应如何求值。这个优先级是固定的,并且遵循一定的规则。当运算符的优先级相同时,运算的方向(从左到右或从右到左)则称为运算符的结合性。
下面是一个简化的C语言运算符优先级列表(从高到低):
- 后缀运算符:
()函数调用,[]数组下标,->结构体成员选择,.结构体成员选择 - 一元运算符:
++(后缀),--(后缀),+(取正),-(取负),&(取地址),*(解引用),!(逻辑非),~(按位取反),sizeof,typeof,alignof(C11),_Alignof(C11) - 乘法类运算符:
*(乘法),/(除法),%(取模) - 加法类运算符:
+(加法),-(减法) - 位移运算符:
<<(左移),>>(右移) - 关系运算符:
<(小于),<=(小于等于),>(大于),>=(大于等于) - 相等性运算符:
==(等于),!=(不等于) - 按位与运算符:
&(按位与) - 按位异或运算符:
^(按位异或) - 按位或运算符:
|(按位或) - 逻辑与运算符:
&&(逻辑与) - 逻辑或运算符:
||(逻辑或) - 条件运算符:
?:(三元运算符) - 赋值运算符:
=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|= - 逗号运算符:
,
对于同级运算符(即具有相同优先级的运算符),C语言采用从左到右的结合性。这意味着在没有括号的情况下,同级运算符将从左至右进行运算。例如,表达式 a = b = c = 5; 会从右向左进行赋值,即 c 首先被赋值为 5,然后 b 被赋值为 c 的值(即 5),最后 a 被赋值为 b 的值(即 5)。

注意,虽然这个列表提供了一个大致的优先级顺序,但在编写复杂的表达式时,为了代码的可读性和避免潜在的错误,最好使用括号来明确指定运算的顺序。



![[计算机知识] TCP/IP网络模型、MySQL的结构](https://img-blog.csdnimg.cn/direct/f6f19280aa4442c6b2e89056f7ed4bc7.png)















