C语言运算符优先级速记口诀
在C语言中,运算符优先级是写出正确且高效代码的关键。为了帮助你更好地记住这些优先级,我整理了一套记忆技巧和速查表,让你不再混淆!
📌 C语言运算符优先级速记口诀
口诀:
“单算移关与,异或逻条赋”
(单目 > 算术 > 移位 > 关系 > 位与 > 异或 > 位或 > 逻辑 > 条件 > 赋值)
1️⃣ 单目运算符(最高优先级)
++
--
(自增/自减)!
~
(逻辑非、按位取反)+
-
(正负号,如-5
)(type)
(强制类型转换)*
&
(指针、取地址)sizeof
记忆技巧:
“单枪匹马闯天下”(单目运算符优先级最高,单独行动)
2️⃣ 算术运算符
*
/
%
(乘、除、取模)+
-
(加、减)
记忆技巧:
“先乘除,后加减”(和数学一样)
3️⃣ 移位运算符
<<
>>
(左移、右移)
记忆技巧:
“移动位置,但不如算术重要”
4️⃣ 关系运算符
<
<=
>
>=
(比较大小)==
!=
(等于、不等于)
记忆技巧:
“先比大小,再判等”
5️⃣ 位运算符
&
(按位与)^
(按位异或)|
(按位或)
记忆技巧:
“与或非,按位算”(
&
>^
>|
)
6️⃣ 逻辑运算符
&&
(逻辑与)||
(逻辑或)
记忆技巧:
“先与后或”(
&&
比||
优先级高)
7️⃣ 条件运算符(三目运算符)
? :
(如a > b ? a : b
)
记忆技巧:
“问号冒号,最后决定”
8️⃣ 赋值运算符(最低优先级)
=
+=
-=
*=
/=
%=
<<=
>>=
&=
^=
|=
记忆技巧:
“赋值总是最后算”
📊 运算符优先级完整速查表(从高到低)
优先级 | 运算符 | 描述 | 结合性 |
---|---|---|---|
1 | () [] -> . ++ -- | 函数调用、数组、成员访问、自增自减 | 左→右 |
2 | ! ~ + - * & sizeof (type) | 单目运算符 | 右→左 |
3 | * / % | 乘、除、取模 | 左→右 |
4 | + - | 加、减 | 左→右 |
5 | << >> | 左移、右移 | 左→右 |
6 | < <= > >= | 关系比较 | 左→右 |
7 | == != | 等于、不等于 | 左→右 |
8 | & | 按位与 | 左→右 |
9 | ^ | 按位异或 | 左→右 |
10 | | | 按位或 | 左→右 |
11 | && | 逻辑与 | 左→右 |
12 | || | 逻辑或 | 左→右 |
13 | ? : | 三目运算符 | 右→左 |
14 | = += -= *= /= %= <<= >>= &= ^= |= | 赋值运算符 | 右→左 |
15 | , | 逗号运算符 | 左→右 |
💡 如何避免混淆?
- 多用括号:
(a + b) * c
比a + b * c
更清晰。 - 记住关键顺序:
- 单目 > 算术 > 移位 > 关系 > 位运算 > 逻辑 > 条件 > 赋值
- 测试代码:不确定时,写个小程序验证优先级。
📝 测试示例
#include <stdio.h>
int main() {
int a = 5, b = 3, c = 2;
int result = a + b * c; // 先算 b * c,再 + a → 5 + 6 = 11
printf("%d\n", result); // 输出 11
result = (a + b) * c; // 先算 a + b,再 * c → 8 * 2 = 16
printf("%d\n", result); // 输出 16
return 0;
}
🎯 总结
✅ 口诀:“单算移关与,异或逻条赋”
✅ 关键顺序:单目 > 算术 > 移位 > 关系 > 位运算 > 逻辑 > 条件 > 赋值
✅ 最佳实践:多用括号,避免歧义!
这样记忆后,C语言的运算符优先级就不再是难题啦! 🚀