运算符是 C 语言表达计算的"动词"。加减乘除、比较判断、逻辑与或、甚至直接操作二进制位——掌握了它们,你才能写出真正有逻辑的程序。本文按类别梳理 C 的常用运算符,并指出最容易踩的坑。
1. 算术运算符
C 的算术运算符包括 +、-、*、/ 和 %(取余)。特别要注意:两个整数相除,结果还是整数,小数部分被直接丢弃。
#include <stdio.h>
int main(void) {
int a = 10, b = 3;
printf("a + b = %d\n", a + b);
printf("a - b = %d\n", a - b);
printf("a * b = %d\n", a * b);
printf("a / b = %d\n", a / b); // 整数除法,结果为 3
printf("a %% b = %d\n", a % b); // 取余,结果为 1
printf("10.0 / 3 = %.2f\n", 10.0 / 3); // 浮点除法
return 0;
}
2. 赋值与复合赋值
除了 =,C 还提供 +=、-=、*=、/=、%= 等复合赋值运算符。x += 5 等价于 x = x + 5,写起来更简洁,而且左侧表达式只计算一次。
#include <stdio.h>
int main(void) {
int x = 10;
x += 5; // x = 15
x *= 2; // x = 30
x -= 8; // x = 22
x /= 2; // x = 11
printf("x = %d\n", x);
return 0;
}
3. 关系与逻辑运算符
关系运算符 <、>、<=、>=、==、!= 的结果是 0 或 1;逻辑运算符 &&(与)、||(或)、!(非)用来组合条件。最容易犯的错:== 是比较,= 是赋值,写混了程序不会报错但逻辑全错——这是新手一号 bug。
4. 位运算符
位运算直接操作二进制位,在嵌入式、图像处理和性能敏感场景非常有用:
#include <stdio.h>
int main(void) {
int x = 5, y = 3; // 二进制:0101 & 0011
printf("x & y = %d\n", x & y); // 按位与:1
printf("x | y = %d\n", x | y); // 按位或:7
printf("x ^ y = %d\n", x ^ y); // 按位异或:6
printf("x << 1 = %d\n", x << 1); // 左移一位:10
printf("x >> 1 = %d\n", x >> 1); // 右移一位:2
return 0;
}
左移一位相当于乘以 2,右移一位相当于整除 2。注意:对有符号负数右移,行为与具体平台相关。
5. 自增自减与三目运算符
i++ 先使用再自增,++i 先自增再使用;三目运算符 条件 ? 表达式1 : 表达式2 是 if-else 的简写:
#include <stdio.h>
int main(void) {
int i = 3;
printf("%d\n", i++); // 打印 3,然后 i 变成 4
printf("%d\n", ++i); // i 先变成 5,再打印 5
int score = 75;
char *result = score >= 60 ? "及格" : "不及格";
printf("%s\n", result);
return 0;
}
6. 优先级速查
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 最高 | () [] -> . | 左→右 |
| 高 | * / % | 左→右 |
| 中 | + - | 左→右 |
| 低 | < > <= >= == != | 左→右 |
| 更低 | && || | 左→右 |
| 最低 | = += -= 等赋值 | 右→左 |
记忆口诀:括号最优先,乘除先于加减,比较先于逻辑,赋值最后做。拿不准就加括号——可读性永远优先。
💡 学习建议:找一张"运算符优先级表"存起来;再故意把==写成=一次,亲眼看看编译器给出什么警告——错误是最好的老师。