在任何编程语言中,执行数学计算都是最基本也是最重要的操作之一。在 C 语言中,我们使用算术运算符来完成这些计算。理解这些运算符的功能、用法和优先级,是编写任何 C 程序的基石。
今天,我们就来详细探讨 C 语言中的各种算术运算符,包括它们的基本用法、一些特殊的运算符(如自增自减)以及通过代码示例来加深理解。
在 C 语言中,运算符种类繁多,用于执行不同的操作。粗略分类,常见的运算符包括:
if)和循环。&&)、逻辑或(||)、逻辑非(!)。&)、按位或(|)、按位非(~)、按位异或(^)。<<, >>)。=,+=,-= 等)。sizeof 运算符,条件运算符 ? :,取地址运算符 &,指针解引用运算符 * 等。本文的重点将聚焦在最基础的——算术运算符。
算术运算符用于执行基本的数学运算。它们根据所需操作数的数量,可以分为单目运算符(一个操作数)和双目运算符(两个操作数)。
+):表示正数。通常可以省略。例如 +5 和 5 意义相同。-):表示负数或取反一个数的符号。例如 -10,或者 -a(如果 a 是 5,则 -a 是 -5)。+):计算两个数的和。例如 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 的结果是 -1,10 % -3 的结果是 1。++) 和自减 (--) 运算符这是 C 语言中非常方便的单目运算符,用于将变量的值增加或减少 1。它们有两种形式:前缀形式和后缀形式。
++variable 或 --variable):variable++ 或 variable--):这两种形式在单独使用时(例如 a++; 或 ++a;)效果是相同的,都是将变量 a 的值增加 1。但当它们用在更复杂的表达式中时,前缀和后缀的区别就非常重要了。
当一个表达式包含多个运算符时,C 语言会根据运算符的优先级和结合性来确定计算顺序。算术运算符的优先级从高到低大致为:
+, -, ++, --)*, /, %)+, -)同一优先级的运算符通常从左到右结合(除了单目运算符通常从右到左)。可以使用括号 () 来强制改变计算顺序。
让我们编写一个 C 程序来演示上面介绍的各种算术运算符,并观察它们的运行结果。
#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; // 程序成功结束
}将上面的代码保存为 arithmetic_operators.c 文件,然后在终端中使用 C 编译器(如 GCC)进行编译和运行:
gcc arithmetic_operators.c -o arithmetic_operators
./arithmetic_operators运行结果:
--- 单目正负号 ---
正号 (+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通过运行结果,我们可以清晰地看到各种算术运算符的效果,特别是整数除法的截断行为、取余数的符号规则以及自增自减运算符在前缀和后缀形式下在表达式中的不同表现。使用除法和取余来提取数字各位的例子也展示了这些运算符在解决实际问题时的应用。
算术运算符是 C 语言中最基本、最常用的运算符。本文详细介绍了:
+, -)。+, -, *, /),并强调了整数除法与浮点除法的区别。%) 运算符,及其只能用于整数和结果符号与被除数一致的特性。++) 和自减 (--) 运算符,并通过示例区分了前缀和后缀形式在表达式中的关键差异。熟练掌握这些算术运算符是编写任何 C 语言程序的基础。在编写代码时,请注意运算符的优先级,并在需要时使用括号来确保计算顺序符合预期。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。