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;
}
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 操作数。