C语言算术运算符详解
C语言提供了一系列算术运算符用于执行基本数学运算,包括加法、减法、乘法、除法、取模(求余数)等。以下是详细的分类和用法说明:
1. 基本算术运算符
运算符 | 名称 | 描述 | 示例 | 结果(整数) |
---|---|---|---|---|
+ | 加法 | 两数相加 | 5 + 3 | 8 |
- | 减法 | 左操作数减右操作数 | 10 - 4 | 6 |
* | 乘法 | 两数相乘 | 3 * 4 | 12 |
/ | 除法 | 左操作数除以右操作数 | 10 / 3 | 3(整数) |
% | 取模 | 返回除法的余数 | 10 % 3 | 1 |
关键注意点:
整数除法:当两个操作数均为整数时,结果会截断小数部分(不四舍五入)。
7 / 2; // 结果为3(不是3.5)
浮点数除法:若任一操作数为浮点数,结果为浮点数。
7.0 / 2; // 结果为3.5
取模限制:% 仅用于整数类型(int, char等),浮点数不可用。
2. 自增与自减运算符
用于对变量进行加1或减1操作,分为前缀和后缀两种形式:
运算符 | 名称 | 描述 | 示例代码 | 结果(a=5) |
---|---|---|---|---|
++a | 前缀自增 | 先自增,后使用值 | b = ++a; | a=6, b=6 |
a++ | 后缀自增 | 先使用值,后自增 | b = a++; | a=6, b=5 |
--a | 前缀自减 | 先自减,后使用值 | b = --a; | a=4, b=4 |
a-- | 后缀自减 | 先使用值,后自减 | b = a--; | a=4, b=5 |
注意:避免在复杂表达式中混合使用自增/自减(如 a = a++ + ++a;),行为未定义!
3. 复合赋值运算符
将算术运算与赋值结合,简化代码:
运算符 | 等价形式 | 示例(a=5) |
---|---|---|
+= | a = a + b | a += 3; → a=8 |
-= | a = a - b | a -= 2; → a=3 |
*= | a = a * b | a *= 4; → a=20 |
/= | a = a / b | a /= 2; → a=2 |
%= | a = a % b | a %= 3; → a=2 |
4. 运算符优先级与结合性
优先级从高到低(同一行优先级相同):
运算符 | 结合性 | 示例 |
---|---|---|
()(括号) | 从左到右 | (a + b) * c |
++, --(后缀) | 从左到右 | a++, b-- |
++, --(前缀) | 从右到左 | ++a, --b |
*, /, % | 从左到右 | a * b / c % d |
+, - | 从左到右 | a + b - c |
示例解析:
int result = 10 + 2 * 3; // 先算乘法:2*3=6 → 10+6=16
int result2 = (10 + 2) * 3; // 括号优先:12*3=36
5. 常见陷阱与注意事项
整数除法截断:
float x = 5 / 2; // 错误!结果为2.0(整数除法)
float y = 5.0 / 2; // 正确:2.5
2.除数为零:
整数除法:5 / 0 → 运行时崩溃(除零错误)。
浮点数除法:5.0 / 0.0 → 结果为 inf(无穷大)。
3.取模运算的限制:
// int mod = 5.5 % 2; // 错误!% 不能用于浮点数
4.负数的取模结果:符号取决于编译器实现(C99规定结果符号与被除数一致)。
-10 % 3; // 结果可能是 -1(多数编译器)
10 % -3; // 结果为1
6. 综合示例
#include <stdio.h>
int main() {
int a = 10, b = 3;
float c = 10.0;
// 基本运算
printf("加法: %d\n", a + b); // 13
printf("减法: %d\n", a - b); // 7
printf("乘法: %d\n", a * b); // 30
printf("整数除法: %d\n", a / b); // 3
printf("浮点除法: %.2f\n", c / b); // 3.33
printf("取模: %d\n", a % b); // 1
// 自增/自减
int x = 5;
printf("后缀自增: %d\n", x++); // 输出5,x变为6
printf("前缀自增: %d\n", ++x); // 输出7,x变为7
// 复合赋值
x += 3; // x = x + 3 → 10
printf("复合赋值: %d\n", x);
return 0;
}
总结
基础运算符:+, -, *, /, %(注意整数除法和取模限制)。
自增/自减:前缀(先运算后使用)和后缀(先使用后运算)。
复合赋值:简化代码(如 a += b)。
优先级:括号 > 自增/自减 > 乘除取模 > 加减。
避坑:整数除法截断、除零错误、取模仅限整数。