核心学习原则
C语言共提供34种运算符 ,覆盖算术、关系、逻辑、赋值、位运算、指针等多种操作类型。对于初学者而言,无需死记硬背所有运算符的优先级和结合性,这是学习运算符的核心原则。
优先级问题的实用解决方案
当遇到复杂表达式或对运算顺序存在疑问时,可采用以下三种方法解决,既保证代码正确性,又提升可读性:
1. 主动使用括号明确运算顺序
括号是优先级最高的运算符,通过添加括号可以强制指定运算的先后顺序,完全规避优先级记忆错误。
-
原复杂表达式(易产生歧义):
int k = 3 + 2 * 4 && 5 || 6 - 7; -
加括号明确顺序(清晰无歧义):
int k = ((3 + (2 * 4)) && 5) || (6 - 7);
2. 为代码可读性添加括号
即使你明确知道运算符的优先级,也建议为复杂逻辑添加括号。这是软件工程中的重要实践:
-
不同开发者对运算符优先级的熟悉程度不同,括号能让所有阅读者一眼看懂运算逻辑。
-
避免因优先级理解偏差导致的隐性bug。
-
示例:
// 虽然&&优先级高于||,但添加括号后逻辑更清晰 if ((a > b && c < d) || (e == f && g != h)) { // 业务逻辑 }
3. 拆分复杂表达式
对于包含多个运算符的超长表达式,建议拆分为多个简单语句,分步计算:
// 拆分前:难以阅读和调试
int result = a * b + c / d - e % f && g > h || i < j;
// 拆分后:逻辑清晰,便于调试
int part1 = a * b + c / d - e % f;
int part2 = g > h;
int part3 = i < j;
int result = (part1 && part2) || part3;
后续学习规划
当前阶段只需掌握已讲解的基础运算符即可,包括:
-
算术运算符:
+、-、*、/、% -
赋值运算符:
=、复合赋值运算符(+=、-=、*=、/=、%=) -
关系运算符:
>、<、>=、<=、==、!= -
逻辑运算符:
!、&&、||
以下运算符将在后续章节中结合具体应用场景详细讲解,无需提前花费大量时间钻研:
-
自增自减运算符:
++、-- -
条件运算符(三目运算符):
?: -
位运算符:
<<、>>、~、|、^、& -
指针运算符:
*、& -
其他特殊运算符:
sizeof、逗号运算符、下标运算符[]、成员运算符./->等
附录:常用运算符优先级速查(参考谭浩强教材)
| 优先级 | 运算符类型 | 运算符 | 结合性 |
|---|---|---|---|
| 1 | 最高优先级 | ()、[]、.、-> |
自左至右 |
| 2 | 单目运算符 | !、~、++、--、(类型)、*、&、sizeof |
自右至左 |
| 3 | 算术乘除模 | *、/、% |
自左至右 |
| 4 | 算术加减 | +、- |
自左至右 |
| 5 | 移位运算符 | <<、>> |
自左至右 |
| 6 | 关系运算符 | <、<=、>、>= |
自左至右 |
| 7 | 相等运算符 | ==、!= |
自左至右 |
| 8 | 按位与 | & |
自左至右 |
| 9 | 按位异或 | ^ |
自左至右 |
| 10 | 按位或 | ` | ` |
| 11 | 逻辑与 | && |
自左至右 |
| 12 | 逻辑或 | ` | |
| 13 | 条件运算符 | ?: |
自右至左 |
| 14 | 赋值运算符 | =、+=、-=、*=、/=、%=等 |
自右至左 |
| 15 | 逗号运算符 | , |
自左至右 |
说明:优先级数字越小,运算级别越高。同一优先级的运算符按结合性指定的顺序执行。