C语言中的算术运算符



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

除了上述分别分配给四个符号+*/的运算之外,C语言还有一个名为模运算符的算术运算符,我们使用%符号。

下表列出了C语言中的算术运算符:

运算符 描述
+ 将两个操作数相加。
从第一个操作数中减去第二个操作数。
* 将两个操作数相乘。
/ 将分子除以分母。
% 模运算符,返回整数除法后的余数。
++ 自增运算符将整数值增加一。
-- 自减运算符将整数值减少一。

上表中也列出了++--运算符。我们将在单独的章节中学习自增和自减运算符。

示例: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;
}

输出

运行此代码时,将产生以下输出:

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\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

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

示例

至少有一个浮点(或双精度)操作数的算术运算的结果始终是浮点数。请看以下示例:

#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

使用char数据类型的算术运算

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

示例

以下示例显示如何对两个操作数执行算术运算,其中一个操作数为“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说明符将显示空白。

C语言中的模运算符

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

示例

请看以下示例:

#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类型的操作数。如果不是,编译器会给出类型不匹配错误。例如,在上例代码中将“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操作数进行模运算。

C语言中的否定运算符

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

示例

以下示例重点介绍如何在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。

c_operators.htm
广告