首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C 语言算术运算符:掌握编程中的“加减乘除”

C 语言算术运算符:掌握编程中的“加减乘除”

原创
作者头像
用户12619587
发布2026-07-12 14:47:38
发布2026-07-12 14:47:38
120
举报

在任何编程语言中,执行数学计算都是最基本也是最重要的操作之一。在 C 语言中,我们使用算术运算符来完成这些计算。理解这些运算符的功能、用法和优先级,是编写任何 C 程序的基石。

今天,我们就来详细探讨 C 语言中的各种算术运算符,包括它们的基本用法、一些特殊的运算符(如自增自减)以及通过代码示例来加深理解。


1. 运算符的大家族(简述)

在 C 语言中,运算符种类繁多,用于执行不同的操作。粗略分类,常见的运算符包括:

  • 算术运算符:用于执行加、减、乘、除等数学运算。
  • 比较运算符:用于比较两个值,例如判断是否相等、大于、小于等,常用于条件判断(if)和循环。
  • 逻辑运算符:用于组合或修改布尔表达式,例如逻辑与(&&)、逻辑或(||)、逻辑非(!)。
  • 位运算符:对数据的二进制位进行操作,例如按位与(&)、按位或(|)、按位非(~)、按位异或(^)。
  • 移位运算符:将数据的二进制位向左或向右移动(<<>>)。
  • 赋值运算符:用于给变量赋值(=+=-= 等)。
  • 其他运算符:如求字节数的 sizeof 运算符,条件运算符 ? :,取地址运算符 &,指针解引用运算符 * 等。

本文的重点将聚焦在最基础的——算术运算符


2. 算术运算符详解

算术运算符用于执行基本的数学运算。它们根据所需操作数的数量,可以分为单目运算符(一个操作数)和双目运算符(两个操作数)。

2.1 单目算术运算符

  • 正号 (+):表示正数。通常可以省略。例如 +5 和 5 意义相同。
  • 负号 (-):表示负数或取反一个数的符号。例如 -10,或者 -a(如果 a 是 5,则 -a 是 -5)。

2.2 双目算术运算符

  • 加法 (+):计算两个数的和。例如 a + b
  • 减法 (-):计算两个数的差。例如 a - b
  • 乘法 (*):计算两个数的积。例如 a * b
  • 除法 (/):计算两个数的商。
  • 如果两个操作数都是整数,执行整数除法,结果将截断小数部分(向零取整)。例如 10 / 3 的结果是 3-10 / 3 的结果是 -3
  • 如果至少有一个操作数是浮点数float 或 double),执行浮点除法,结果将保留小数部分。例如 10.0 / 3 或 10 / 3.0 的结果是约 3.333333...
  • 取余数 (%):计算两个整数相除的余数。
  • 只能用于整数操作数。
  • 结果的符号与被除数的符号相同。
  • 例如 10 % 3 的结果是 1-10 % 3 的结果是 -110 % -3 的结果是 1
  • 取余数在编程中有许多巧妙的应用,例如判断奇偶、循环处理、以及提取数字的某一位(我们稍后会演示)。

2.3 自增 (++) 和自减 (--) 运算符

这是 C 语言中非常方便的单目运算符,用于将变量的值增加或减少 1。它们有两种形式:前缀形式和后缀形式。

  • 前缀形式 (++variable  --variable)
  • 将变量的值增加/减少 1。
  • 然后使用新值参与所在的表达式计算。
  • 后缀形式 (variable++  variable--)
  • 使用变量的当前值参与所在的表达式计算。
  • 然后将变量的值增加/减少 1。

这两种形式在单独使用时(例如 a++;++a;)效果是相同的,都是将变量 a 的值增加 1。但当它们用在更复杂的表达式中时,前缀和后缀的区别就非常重要了。


3. 算术运算符优先级(简述)

当一个表达式包含多个运算符时,C 语言会根据运算符的优先级和结合性来确定计算顺序。算术运算符的优先级从高到低大致为:

  1. 单目运算符(+-++--
  2. 乘、除、取余(*/%
  3. 加、减(+-

同一优先级的运算符通常从左到右结合(除了单目运算符通常从右到左)。可以使用括号 () 来强制改变计算顺序。


4. 代码示例:演示算术运算符的用法

让我们编写一个 C 程序来演示上面介绍的各种算术运算符,并观察它们的运行结果。

代码语言:plain
复制
#include <stdio.h> // 引入标准输入输出库

int main() {
    // 声明一些变量
    int a = 10;
    int b = 3;
    int result_int;

    double c = 10.0;
    double d = 3.0;
    double result_double;

    int x = 5;
    int y, z;

    // 1. 单目正负号 (通常用于初始化或改变符号)
    int positive_num = +a; // + 可以省略
    int negative_num = -a;
    printf("--- 单目正负号 ---\n");
    printf("正号 (+%d): %d\n", a, positive_num);
    printf("负号 (-%d): %d\n", a, negative_num);
    printf("\n");

    // 2. 双目加减乘除
    printf("--- 双目加减乘除 ---\n");
    result_int = a + b;
    printf("加法 (%d + %d): %d\n", a, b, result_int);

    result_int = a - b;
    printf("减法 (%d - %d): %d\n", a, b, result_int);

    result_int = a * b;
    printf("乘法 (%d * %d): %d\n", a, b, result_int);

    // 整数除法 (截断小数)
    result_int = a / b;
    printf("整数除法 (%d / %d): %d\n", a, b, result_int);

    // 浮点除法
    result_double = c / d;
    printf("浮点除法 (%.1lf / %.1lf): %lf\n", c, d, result_double);

    // 混合类型除法 (也会执行浮点除法,因为有一个操作数是浮点数)
    result_double = a / d;
    printf("混合除法 (%d / %.1lf): %lf\n", a, d, result_double);
    printf("\n");

    // 3. 取余数 (%) - 只能用于整数
    printf("--- 取余数 (%) ---\n");
    result_int = a % b;
    printf("取余数 (%d %% %d): %d\n", a, b, result_int); // 注意 %% 用于打印 %

    // 负数取余
    int neg_a = -10;
    result_int = neg_a % b;
    printf("取余数 (%d %% %d): %d\n", neg_a, b, result_int);
    printf("\n");

    // 4. 自增自减 (单独使用)
    printf("--- 自增自减 (单独使用) ---\n");
    printf("初始 x = %d\n", x);
    x++; // 后缀自增
    printf("执行 x++ 后, x = %d\n", x);
    ++x; // 前缀自增
    printf("执行 ++x 后, x = %d\n", x);
    x--; // 后缀自减
    printf("执行 x-- 后, x = %d\n", x);
    --x; // 前缀自减
    printf("执行 --x 后, x = %d\n", x);
    printf("\n");

    // 5. 自增自减 (在表达式中使用)
    printf("--- 自增自减 (在表达式中使用) ---\n");
    int m = 5;
    int n;

    // 前缀自增示例: 先自增 m (变成 6), 再将新值 (6) 赋给 n
    n = ++m;
    printf("m = %d, n = %d\n", m, n); // 预期 m=6, n=6

    // 后缀自增示例: 先将 m 当前值 (6) 赋给 n, 再自增 m (变成 7)
    m = 5; // 重置 m 的值
    n = m++;
    printf("m = %d, n = %d\n", m, n); // 预期 m=6, n=5

    // 前缀自减示例: 先自减 m (变成 4), 再将新值 (4) 赋给 n
    m = 5; // 重置 m 的值
    n = --m;
    printf("m = %d, n = %d\n", m, n); // 预期 m=4, n=4

    // 后缀自减示例: 先将 m 当前值 (4) 赋给 n, 再自减 m (变成 3)
    m = 5; // 重置 m 的值
    n = m--;
    printf("m = %d, n = %d\n", m, n); // 预期 m=4, n=5 (注意 m 的值是操作后才改变的)
    printf("\n");


    // 6. 实际应用: 使用除法和取余提取数字的各位
    printf("--- 提取数字的各位 (使用 / 和 %%) ---\n");
    int number = 9876; // 假设一个四位数
    int units_digit, tens_digit, hundreds_digit, thousands_digit;

    units_digit = number % 10;         // 9876 % 10 = 6 (个位)
    tens_digit = (number / 10) % 10;   // (9876 / 10) = 987; 987 % 10 = 7 (十位)
    hundreds_digit = (number / 100) % 10; // (9876 / 100) = 98; 98 % 10 = 8 (百位)
    thousands_digit = (number / 1000);   // (9876 / 1000) = 9 (千位,整数除法)

    printf("数字 %d 的各位是:\n", number);
    printf("个位: %d\n", units_digit);
    printf("十位: %d\n", tens_digit);
    printf("百位: %d\n", hundreds_digit);
    printf("千位: %d\n", thousands_digit);
    printf("\n");


    return 0; // 程序成功结束
}

5. 编译与运行结果

将上面的代码保存为 arithmetic_operators.c 文件,然后在终端中使用 C 编译器(如 GCC)进行编译和运行:

代码语言:plain
复制
gcc arithmetic_operators.c -o arithmetic_operators
./arithmetic_operators

运行结果:

代码语言:plain
复制
--- 单目正负号 ---
正号 (+10): 10
负号 (-10): -10

--- 双目加减乘除 ---
加法 (10 + 3): 13
减法 (10 - 3): 7
乘法 (10 * 3): 30
整数除法 (10 / 3): 3
浮点除法 (10.0 / 3.0): 3.333333
混合除法 (10 / 3.0): 3.333333

--- 取余数 (%) ---
取余数 (10 % 3): 1
取余数 (-10 % 3): -1

--- 自增自减 (单独使用) ---
初始 x = 5
执行 x++ 后, x = 6
执行 ++x 后, x = 7
执行 x-- 后, x = 6
执行 --x 后, x = 5

--- 自增自减 (在表达式中使用) ---
m = 5, n = 5  // 重置 m=5
n = ++m;      // m 先变成 6, 然后 n=6
printf("m = %d, n = %d\n", m, n); // 预期 m=6, n=6 实际 m = 6, n = 6

m = 5;       // 重置 m=5
n = m++;     // 先 n = m (n=5), 然后 m 变成 6
printf("m = %d, n = %d\n", m, n); // 预期 m=6, n=5 实际 m = 6, n = 5

m = 5;       // 重置 m=5
n = --m;     // m 先变成 4, 然后 n=4
printf("m = %d, n = %d\n", m, n); // 预期 m=4, n=4 实际 m = 4, n = 4

m = 5;       // 重置 m=5
n = m--;     // 先 n = m (n=5), 然后 m 变成 4
printf("m = %d, n = %d\n", m, n); // 预期 m=4, n=5 实际 m = 4, n = 5

--- 提取数字的各位 (使用 / 和 %%) ---
数字 9876 的各位是:
个位: 6
十位: 7
百位: 8
千位: 9

通过运行结果,我们可以清晰地看到各种算术运算符的效果,特别是整数除法的截断行为、取余数的符号规则以及自增自减运算符在前缀和后缀形式下在表达式中的不同表现。使用除法和取余来提取数字各位的例子也展示了这些运算符在解决实际问题时的应用。


7. 总结

算术运算符是 C 语言中最基本、最常用的运算符。本文详细介绍了:

  • 单目正负号 (+-)。
  • 双目加减乘除 (+-*/),并强调了整数除法与浮点除法的区别。
  • 取余数 (%) 运算符,及其只能用于整数和结果符号与被除数一致的特性。
  • 自增 (++) 和自减 (--) 运算符,并通过示例区分了前缀和后缀形式在表达式中的关键差异。
  • 演示了如何利用整数除法和取余巧妙地提取数字的各个位数。

熟练掌握这些算术运算符是编写任何 C 语言程序的基础。在编写代码时,请注意运算符的优先级,并在需要时使用括号来确保计算顺序符合预期。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 运算符的大家族(简述)
  • 2. 算术运算符详解
    • 2.1 单目算术运算符
    • 2.2 双目算术运算符
    • 2.3 自增 (++) 和自减 (--) 运算符
  • 3. 算术运算符优先级(简述)
  • 4. 代码示例:演示算术运算符的用法
  • 5. 编译与运行结果
  • 7. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档