Cprogramming 简明教程

Arithmetic Operators in C

C 中的算术运算符是某些特殊符号,预定义为执行算术运算。我们熟悉基本算术运算 − 加法、减法、乘法和除法。C 是一种计算语言,因此这些运算符对于执行计算机化进程至关重要。

除了分别分配给四个符号 @s26@s27@s28@s29 的上述运算之外,C 中还有另一个算术运算符,称为 @s30,我们针对它使用 %* 符号。

下表列出了 C 中的算术运算符 −

Operator

Description

+

Adds two operands.

减去第二个运算数。

*

Multiplies both operands.

/

Divides numerator by denominator.

%

求余运算符和整数除法后的余数。

++

增量运算符将整数 1 加上 integer。

 — 

减量运算符将整数 value 减去 1。

@s31@s32 运算符也列在上面表中。将我们在单独的章节中学习增量和减量运算符。

Example: Arithmetic Operators in C

以下示例演示了如何在 C 程序中使用这些算术运算符- -

#include <stdio.h>

int main(){

   int op1 = 10;
   int op2 = 3;

   printf("Operand1: %d Operand2: %d \n\n", op1, op2);
   printf("Addition of op1 and op2: %d\n", op1 + op2);
   printf("Subtraction of op2 from op1: %d\n", op1 - op2);
   printf("Multiplication of op1 and op2: %d\n", op1 * op2);
   printf("Division of op1 by op2: %d\n", op1/op2);

   return 0;
}

Output

当你运行这段代码时,它将产生以下输出:

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

Type Casting in C

前三个结果和预期一样,但除法的结果却不是。预期 10/3 是一个分数(3.333333)。是否是因为我们使用 %d 格式说明符来打印除法结果?如果我们更改代码的最后一行如下- -

printf("Division of op1 by op2: %f\n", op1/op2);

现在除法运算的结果将是 "0.000000",这更加令人惊讶。C 之所以这样表现是因为整数与另一个整数的除法总是返回一个整数。

若要获得浮点除法运算,至少一个操作数必须是浮点数,或者需要使用类型转换运算符将一个整数操作数更改为浮点数。

现在,将给定程序的最后一个 printf 语句更改为如下所示- -

printf("Division of op1 by op2: %f\n", (float)op1/op2);

在进行此更改后再次运行代码时,它将显示正确的除法运算结果- -

Division of op1 by op2: 3.333333

Note: 如果对浮点表达式使用 %d 格式说明符,它将始终导致 "0"。

Example

使用至少一个浮点数(或双精度数)操作数的算术运算结果始终为浮点数。请参阅以下示例- -

#include <stdio.h>

int main(){

   int op1 = 10;
   float op2 = 2.5;

   printf("Operand1: %d Operand2: %f\n", op1, op2);
   printf("Addition of op1 and op2: %f\n", op1 + op2);
   printf("Subtraction of op2 from op1: %f\n", op1 - op2);
   printf("Multiplication of op1 and op2: %f\n", op1 * op2);
   printf("Division of op1 by op2: %f\n", 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

Arithmetic Operations with char Data Type

在 C 中, char 数据类型是 int 类型的一个子集。因此,我们可以对 char 操作数执行算术运算。

Example

以下示例演示了如何对两个操作数(其中一个为 "char" 类型)执行算术运算- -

#include <stdio.h>

int main(){

   char op1 = 'F';
   int op2 = 3;

   printf("operand1: %c operand2: %d\n", op1, op2);
   printf("Addition of op1 and op2: %d\n", op1 + op2);
   printf("Subtraction of op2 from op1: %d\n", op1 - op2);
   printf("Multiplication of op1 and op2: %d\n", op1 * op2);
   printf("Division of op1 by op2: %d\n", 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 说明符将显示为空。

Modulo Operator in C

模数运算符 ( % ) 返回除法运算的余数。

Example

请看以下示例:

#include <stdio.h>

int main(){

   int op1 = 10;
   int op2 = 3;

   printf("Operand1: %d Operand2: %d\n", op1, op2);
   printf("Modulo of op1 and op2: %d\n", op1%op2);

   return 0;
}

运行代码并检查其输出:

Operand1: 10 Operand2: 3
Modulo of op1 and op2: 1

模数运算符需要两个操作数均为 int 类型。如果不是,编译器将给出 type mismatch error 。例如,在上面的代码中将 "op1" 的数据类型更改为 float 并再次运行该程序- -

float op1 = 10;
int op2 = 3;
printf("Modulo of op1 and op2: %d\n", op1%op2);

现在,你将收到以下消息的类型不匹配错误- -

error: invalid operands to binary % (have 'float' and 'int')

不过,它确实允许对模数运算使用 char 操作数。

Negation Operator in C

由符号 ++-- 表示的增量和递减运算符是一元运算符。它们已在单独的一章中介绍。表示减法运算符的 " " 符号也充当一元否定运算符。

Example

以下示例突出显示了如何在 C 中使用否定运算符- -

#include <stdio.h>

int main(){

   int op1 = 5;
   int op2 = -op1;

   printf("Operand1: %d Operand2: %d\n", op1, op2);

   return 0;
}

当你运行这段代码时,它将产生以下输出:

Operand1: 5 Operand2: -5

在上面的示例中,"–" 符号返回 op1 的负值并将该值分配给 op2。