一个木匠

zqqf16 的个人博客

重拾C语言之运算符优先级

总是记不住C语言各个运算符的优先级,每次用的时候都得用笨办法——加括号。虽然成功率很高,但是稍微长一点的语句可读性极差。因此,就借最近整理C语言知识点的时机恶补一下。

注意:下面的这段内容抄自百度百科

1级(左结合)
( ) 圆括号;[ ]下标运算符;->指向结构体成员运算符;. 结构体成员运算符。
2级(右结合)
“ ! ”逻辑非运算符;“ ~ ”按位取反运算符;“ ++ ”前缀增量运算符;“ -- ”前缀减量运算符;
“ - ”负号运算符;(类型)类型转换运算符;“ * ”指针运算符;“ & ”地址运算符;
“sizeof ” 长度运算符。
3级(左结合)
“ * ” 乘法运算符;“ / ”除法运算符;“ % ” 取余运算符。
4级(左结合)
“ + ”加法运算符;“ - ”减法运算符。
5级(左结合)
<< 左移运算符;>> 右移运算符。
6级(左结合)
<、<=、>、>=关系运算符。
7级(左结合)
“ == ”等于运算符;“ != ”不等于运算符。
8级(左结合)
“ & ”按位与运算符。
9级(左结合)
“ ∧ ”按位异或运算符。
10级(左结合)
“ | ”按位或运算符。 11级(左结合)
“&&”逻辑与运算符。
12级(左结合)
“ || ”逻辑或运算符。
13级(右结合)
? :条件运算符。
14级(右结合)
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=赋值运算符。
15级(左结合)
“,”逗号运算符。

---抄袭结束---

记住“==”和“!=”的优先级高于“&&”和“||”,if的时候就可以省下好几对括号了。

记住[ ]的优先级高于“*”, 就可以区分数组的指针和指针数组了(char (*p)[20]char *p[20])。

PS:如果实在记不清,还是建议乖乖地套上括号,这是最靠谱的方法。

PS2:“只记住两个优先级就够了:乘法和除法优先于加减法,其他操作一律加括号” —— 《C专家编程》