2.5 运算符

本篇学习算术、关系、逻辑、赋值、条件与自增自减等运算规则,并能写出结果明确的表达式。

运算符

概念说明

运算符用于对一个或多个操作数执行计算、比较、逻辑判断或赋值。 C 语言里的运算符很多,但初学阶段最重要的不是死记所有符号,而是理解表达式求值的规则和副作用。

可以先把常见运算符分成几类:

  • 算术运算符:+-*/%
  • 关系运算符:><>=<===!=
  • 逻辑运算符:&&||!
  • 赋值运算符:=+=-=
  • 条件运算符:条件 ? 值1 : 值2
  • 自增自减:++--

复杂表达式的问题通常不在“编译不过”,而在“人读不懂”。 一旦一个表达式同时混入赋值、自增、函数调用和比较,它就很容易变成未来排错的负担。

语法/规则

  1. 整数除法会截断小数部分,例如 5 / 2 的结果是 2
  2. % 取模运算只适用于整数类型。
  3. 关系运算的结果在 C 中是整数语义,条件里 0 表示假,非 0 表示真。
  4. &&|| 具有短路特性,左侧已经能确定结果时,右侧表达式可能不会执行。
  5. 条件运算符适合较短的二选一逻辑,超过这个复杂度时通常 if 更清楚。
  6. ++ii++ 都会让 i 增加 1,但表达式本身的取值时机不同。
  7. 运算符有优先级和结合性,但真实开发中与其死背,不如在关键位置主动加括号明确意图。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>

int main(void) {
    int chinese = 82;
    int math = 91;
    int average = (chinese + math) / 2;
    int passed = average >= 85 && average <= 100;
    int next_level = passed ? 2 : 1;

    printf("average = %d\n", average);
    printf("passed = %d\n", passed);
    printf("next_level = %d\n", next_level);
    return 0;
}

输出结果:

1
2
3
average = 86
passed = 1
next_level = 2

规则补充

当你不确定优先级时,直接加括号通常是更稳妥的做法,例如:

1
int result = (a + b) * c;

这种写法往往比完全依赖优先级表更容易读,也更不容易引入误解。

常见错误

  1. = 写成 ==,或者把 == 写成 =,导致判断逻辑完全变掉。
  2. 忽略整数除法会截断小数,例如 5 / 2 的结果是 2 而不是 2.5
  3. 在同一个表达式里混入太多 ++、赋值和函数调用,导致求值顺序难以判断。
  4. 把位运算符 &| 和逻辑运算符 &&|| 混着用。
  5. 过度依赖“我记得这个优先级”,却没有在关键表达式上补括号澄清意图。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字