C语言算术运算符 #

一、算术运算符概述 #

1.1 基本算术运算符 #

运算符 名称 示例 结果
+ 加法 5 + 3 8
- 减法 5 - 3 2
* 乘法 5 * 3 15
/ 除法 5 / 3 1
% 取余 5 % 3 2

1.2 自增自减运算符 #

运算符 名称 示例 说明
++ 自增 a++ 或 ++a 变量值加1
自减 a-- 或 --a 变量值减1

二、基本算术运算 #

2.1 加减乘除 #

c
#include <stdio.h>

int main() {
    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);
    return 0;
}

输出:

text
a + b = 13
a - b = 7
a * b = 30
a / b = 3

2.2 整数除法 #

整数除法结果为整数,舍去小数部分:

c
#include <stdio.h>

int main() {
    printf("5 / 2 = %d\n", 5 / 2);
    printf("-5 / 2 = %d\n", -5 / 2);
    printf("5 / -2 = %d\n", 5 / -2);
    return 0;
}

2.3 浮点除法 #

c
#include <stdio.h>

int main() {
    printf("5 / 2 = %d\n", 5 / 2);
    printf("5.0 / 2 = %f\n", 5.0 / 2);
    printf("5 / 2.0 = %f\n", 5 / 2.0);
    printf("5.0 / 2.0 = %f\n", 5.0 / 2.0);
    return 0;
}

2.4 取余运算 #

取余运算符 % 只能用于整数:

c
#include <stdio.h>

int main() {
    printf("10 %% 3 = %d\n", 10 % 3);
    printf("10 %% -3 = %d\n", 10 % -3);
    printf("-10 %% 3 = %d\n", -10 % 3);
    printf("-10 %% -3 = %d\n", -10 % -3);
    return 0;
}

输出:

text
10 % 3 = 1
10 % -3 = 1
-10 % 3 = -1
-10 % -3 = -1

结果符号与被除数相同。

2.5 取余应用 #

判断奇偶:

c
if (n % 2 == 0) {
    printf("偶数\n");
} else {
    printf("奇数\n");
}

提取各位数字:

c
#include <stdio.h>

int main() {
    int num = 12345;
    
    printf("个位: %d\n", num % 10);
    printf("十位: %d\n", (num / 10) % 10);
    printf("百位: %d\n", (num / 100) % 10);
    return 0;
}

循环计数:

c
#include <stdio.h>

int main() {
    for (int i = 0; i < 10; i++) {
        if (i % 3 == 0) {
            printf("i = %d\n", i);
        }
    }
    return 0;
}

三、自增自减运算符 #

3.1 前置与后置 #

c
#include <stdio.h>

int main() {
    int a = 5;
    
    printf("a = %d\n", a);
    printf("a++ = %d\n", a++);
    printf("a = %d\n", a);
    
    int b = 5;
    printf("\nb = %d\n", b);
    printf("++b = %d\n", ++b);
    printf("b = %d\n", b);
    return 0;
}

输出:

text
a = 5
a++ = 5
a = 6

b = 5
++b = 6
b = 6

区别:

表达式 返回值 执行后变量值
a++ 原值 a + 1
++a a + 1 a + 1
a– 原值 a - 1
–a a - 1 a - 1

3.2 使用场景 #

循环中:

c
for (int i = 0; i < 10; i++) {
    printf("%d ", i);
}

指针遍历:

c
int arr[] = {1, 2, 3, 4, 5};
int* p = arr;
printf("%d ", *p++);
printf("%d ", *p++);

3.3 注意事项 #

不要在同一表达式中多次使用:

c
int a = 5;
int b = a++ + ++a;

这是未定义行为,不同编译器结果不同。

四、运算符优先级 #

4.1 算术运算符优先级 #

text
高  ++  --  (后置)
    ++  --  (前置)
    *   /   %
低   +   -

4.2 示例 #

c
#include <stdio.h>

int main() {
    int a = 2, b = 3, c = 4;
    
    printf("a + b * c = %d\n", a + b * c);
    printf("(a + b) * c = %d\n", (a + b) * c);
    printf("a * b + c = %d\n", a * b + c);
    printf("a * (b + c) = %d\n", a * (b + c));
    return 0;
}

输出:

text
a + b * c = 14
(a + b) * c = 20
a * b + c = 10
a * (b + c) = 14

五、类型转换 #

5.1 自动类型转换 #

c
#include <stdio.h>

int main() {
    int a = 5;
    float b = 2.0;
    
    printf("int / int = %d\n", 5 / 2);
    printf("int / float = %f\n", a / b);
    printf("float / int = %f\n", b / a);
    return 0;
}

5.2 强制类型转换 #

c
#include <stdio.h>

int main() {
    int a = 5, b = 2;
    
    printf("5 / 2 = %d\n", a / b);
    printf("(float)5 / 2 = %f\n", (float)a / b);
    printf("5 / (float)2 = %f\n", a / (float)b);
    return 0;
}

六、常见错误 #

6.1 整数除法精度丢失 #

c
float result = 5 / 2;
printf("%f\n", result);

输出 2.000000,因为先进行整数除法。

修正:

c
float result = 5.0f / 2;

6.2 除以零 #

c
int a = 10 / 0;

运行时错误。

6.3 取余运算符误用 #

c
float a = 5.5 % 2.5;

编译错误,% 只能用于整数。

七、总结 #

算术运算符 #

运算符 说明 示例
+ 加法 a + b
- 减法 a - b
* 乘法 a * b
/ 除法 a / b
% 取余 a % b

自增自减 #

运算符 说明
a++ 先用后加
++a 先加后用
a– 先用后减
–a 先减后用

注意事项 #

  • 整数除法舍去小数
  • 取余只能用于整数
  • 注意类型转换
  • 避免除以零

下一步,让我们学习关系运算符!

最后更新:2026-03-26