运算符
概念说明
运算符用于对一个或多个操作数执行计算、比较、逻辑判断或赋值。 C 语言里的运算符很多,但初学阶段最重要的不是死记所有符号,而是理解表达式求值的规则和副作用。
可以先把常见运算符分成几类:
- 算术运算符:
+、-、*、/、% - 关系运算符:
>、<、>=、<=、==、!= - 逻辑运算符:
&&、||、! - 赋值运算符:
=、+=、-=等 - 条件运算符:
条件 ? 值1 : 值2 - 自增自减:
++、--
复杂表达式的问题通常不在“编译不过”,而在“人读不懂”。 一旦一个表达式同时混入赋值、自增、函数调用和比较,它就很容易变成未来排错的负担。
语法/规则
- 整数除法会截断小数部分,例如
5 / 2的结果是2。 %取模运算只适用于整数类型。- 关系运算的结果在 C 中是整数语义,条件里
0表示假,非0表示真。 &&和||具有短路特性,左侧已经能确定结果时,右侧表达式可能不会执行。- 条件运算符适合较短的二选一逻辑,超过这个复杂度时通常
if更清楚。 ++i和i++都会让i增加 1,但表达式本身的取值时机不同。- 运算符有优先级和结合性,但真实开发中与其死背,不如在关键位置主动加括号明确意图。
示例
| |
输出结果:
| |
规则补充
当你不确定优先级时,直接加括号通常是更稳妥的做法,例如:
| |
这种写法往往比完全依赖优先级表更容易读,也更不容易引入误解。
常见错误
- 把
=写成==,或者把==写成=,导致判断逻辑完全变掉。 - 忽略整数除法会截断小数,例如
5 / 2的结果是2而不是2.5。 - 在同一个表达式里混入太多
++、赋值和函数调用,导致求值顺序难以判断。 - 把位运算符
&、|和逻辑运算符&&、||混着用。 - 过度依赖“我记得这个优先级”,却没有在关键表达式上补括号澄清意图。