C 语言中的算术运算符
C 语言中的算术运算符是一些预定义用于执行算术运算的特殊符号。我们熟悉基本的算术运算——加法、减法、乘法和除法。 C 语言是一种计算语言,因此这些运算符对于执行计算机化过程至关重要。
除了上述分别分配给四个符号 +、−、* 和 / 的运算之外,C 语言还有另一个算术运算符,称为 模运算符,我们使用 % 符号来表示它。
下表列出了 C 语言中的算术运算符 −
运算符 | 描述 |
---|---|
+ | 将两个操作数相加。 |
从第一个操作数中减去第二个操作数。 | |
* | 将两个操作数相乘。 |
/ | 将分子除以分母。 |
% | 模运算符,用于计算整数除法后的余数。 |
++ | 递增运算符将整数值加一。 |
-- | 减法运算符将整数值减一。 |
上表还列出了 ++ 和 -- 运算符。我们将在单独的章节中学习自增和自减运算符。
示例:C 语言中的算术运算符
以下示例演示了如何在 C 程序中使用这些算术运算符 -
#include <stdio.h> int main(){ int op1 = 10; int op2 = 3; printf("Operand1: %d Operand2: %d ", op1, op2); printf("Addition of op1 and op2: %d ", op1 + op2); printf("Subtraction of op2 from op1: %d ", op1 - op2); printf("Multiplication of op1 and op2: %d ", op1 * op2); printf("Division of op1 by op2: %d ", op1/op2); return 0; }
输出
运行此代码时,将产生以下输出 -
Operand1: 10 Operand2: 3 Addition of op1 and op2: 13 Subtraction of op2 from op1: 7 Multiplication of op1 and op2: 30 Division of op1 by op2: 3
C 语言中的类型转换
前三个结果符合预期,但除法的结果却不符合预期。您预期 10/3 会是小数 (3.333333)。这是因为我们使用了 %d 格式说明符来打印除法结果吗?如果我们将代码的最后一行修改如下:
printf("Division of op1 by op2: %f ", op1/op2);
现在除法运算的结果将为"0.000000",这更令人惊讶。 C 语言之所以如此,是因为一个整数与另一个整数相除总是返回一个整数。
要进行浮点除法,至少有一个操作数必须是浮点数,或者需要使用类型转换运算符将其中一个整数操作数转换为浮点数。
现在,将给定程序的最后一个 printf 语句修改如下:
printf("Division of op1 by op2: %f ", (float)op1/op2);
修改后再次运行代码,将显示正确的除法 -
Division of op1 by op2: 3.333333
注意:如果对浮点表达式使用 %d 格式说明符,结果将始终为"0"。
示例
至少包含一个浮点数(或双精度数)的算术运算的结果始终为浮点数。请看以下示例 -
#include <stdio.h> int main(){ int op1 = 10; float op2 = 2.5; printf("Operand1: %d Operand2: %f ", op1, op2); printf("Addition of op1 and op2: %f ", op1 + op2); printf("Subtraction of op2 from op1: %f ", op1 - op2); printf("Multiplication of op1 and op2: %f ", op1 * op2); printf("Division of op1 by op2: %f ", op1/op2); return 0; }
输出
运行代码并检查其输出 −
Operand1: 10 Operand2: 2.500000 Addition of op1 and op2: 12.500000 Subtraction of op2 from op1: 7.500000 Multiplication of op1 and op2: 25.000000 Division of op1 by op2: 4.000000
char 数据类型的算术运算
在 C 语言中,char 数据类型是 int 类型的子集。因此,我们可以对 char 操作数进行算术运算。
示例
以下示例展示了如何使用两个操作数(其中一个为 char 类型)进行算术运算 -
#include <stdio.h> int main(){ char op1 = 'F'; int op2 = 3; printf("operand1: %c operand2: %d ", op1, op2); printf("Addition of op1 and op2: %d ", op1 + op2); printf("Subtraction of op2 from op1: %d ", op1 - op2); printf("Multiplication of op1 and op2: %d ", op1 * op2); printf("Division of op1 by op2: %d ", op1/op2); return 0; }
输出
运行代码并检查其输出 −
operand1: F operand2: 3 Addition of op1 and op2: 73 Subtraction of op2 from op1: 67 Multiplication of op1 and op2: 210 Division of op1 by op2: 23
由于 char 数据类型是 int 的子集,%c 格式说明符返回与 %d 说明符返回的整数相关联的 ASCII 字符。
如果两个 char 操作数之间的任何算术运算导致整数超出 char 的范围,则 %c 说明符将显示空白。
C 语言中的模运算符
模运算符 (%) 返回除法运算的余数。
示例
请看以下示例 -
#include <stdio.h> int main(){ int op1 = 10; int op2 = 3; printf("Operand1: %d Operand2: %d ", op1, op2); printf("Modulo of op1 and op2: %d ", op1%op2); return 0; }
输出
运行代码并检查其输出 −
Operand1: 10 Operand2: 3 Modulo of op1 and op2: 1
取模运算符需要两个操作数均为 int 类型。如果不是,编译器会报错 类型不匹配错误。例如,将上述代码中"op1"的数据类型更改为 float,然后重新运行程序 -
float op1 = 10; int op2 = 3; printf("对 op1 和 op2 求模:%d ", op1%op2);
现在,您将收到类型不匹配错误,并显示以下消息 -
error: invalid operands to binary % (have 'float' and 'int')
但它允许使用字符型操作数进行模运算。
C 语言中的取反运算符
符号 ++ 和 -- 表示的自增运算符和自减运算符是一元运算符。它们已在单独的章节中介绍。表示减法运算符的"−"符号也充当一元取反运算符。
示例
以下示例重点介绍了如何在 C 语言中使用取反运算符 -
#include <stdio.h> int main(){ int op1 = 5; int op2 = -op1; printf("Operand1: %d Operand2: %d ", op1, op2); return 0; }
输出
运行此代码时,将产生以下输出 -
Operand1: 5 Operand2: -5
在上面的例子中,""符号返回op1的负值并将其赋给op2。