二级C 精品课程3-1-1:C 运算符之算术运算符
文章作者 100test 发表时间 2007:04:06 21:30:15
来源 100Test.Com百考试题网
计算机等级考试训练软件《百宝箱》
所谓运算符就是指运算的符号,例如加运算符( )、乘运算符(*)、取地址运算符(&.)等。表达式与运算符密不可分,它由运算符与操作数组合而成,并由运算符指定对操作数要进行的运算,一个表达式的运算结果是一个值。本章中,我们将介绍C 语言基本的运算符、表达式,各种运算符的优先级、结合性,以及不同数据类型的值之间的转换。
C 语言中的运算符是可以让C 语言编译器能够识别的具有运算意义的符号。编译器把这些符号及其组成的表达式翻译成相应的机器代码,就可以由计算机运行得出正确的结果。
其实,就象我们日常生活当中许多东西的名字,如冰箱、电视机等分别代表不同功能的电器设备一样,运算符就是代表C 语言中的各个运算功能的名字,这些名字是由制定C 语言规范的人员确定的。下面给出由运算符组成的表达式的例子:
下面是几个表达式例子。如:
100 200-300*200 1000/20 100
a || b &.&. c || d
a = b c d*e
a = b
c -= d--
只要是按C 语法写出的表达式,编译器就能够解释其中的运算符和由运算符、操作数组成的表达式的意义。
C 提供的运算符有以下几种:算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、赋值运算符、逗号运算符、sizeof运算符及其它运算符(这是按功能分的)。不同的运算符,需要指定的操作数的个数并不相同。根据运算符需要的操作数的个数,可将其分为三种:单目运算符(一个操作数)、双目运算符(两个个操作数)和三目运算符(三个操作数)。下面,我们介绍几种基本的C 运算符。
3.1.1算术运算符
C 提供5种基本的算术运算符,参见表3-1。
|
表3-1 5种基本的算术运算符 |
|
运算符 |
名字 |
实例 |
|
加 |
12 4.9 // 得出16.9 |
- |
减 |
3.98 - 4 // 得出-0.02 |
* |
乘 |
2 * 3.4 // 得出6.8 |
/ |
除 |
9 / 2.0 // 得出4.5 |
% |
取余 |
13 % 3 // 得出1 | |
这5个算术运算符都是双目运算符。除%运算符外,其它算术运算符的两个操作数可以是整型(short int、int、long int、unsigned short int、unsigned int或unsigned long int型)和实型(float或double型)的混合类型,运算结果的数据类型是:两个操作数的数据类型中,具有较高级别的数据类型(数据类型的级别,请参见3.3节)。例如,一个int型操作数和一个float型操作数的运算结果是float型;一个float型操作数和一个double型操作数的运算结果是double型。
当除运算符(/)的两个操作数均为整数时,所得的结果总是被圆整化为整数。例如:
9 / 2 // 得出 4, 不是4.5!
-9 / 2 // 得出 -5, 不是-4!
在程序设计中,我们有时可以利用整数除法获得所需要的结果,但也容易产生错误。如果两个操作数是整数,要获得实数除法,我们应当将两个或任一个整型操作数强制转换为实型数,例如:
int cost = 100.
int volume = 80.
double unitPrice = cost / (double) volume. // 得出1.25
执行除法运算时,如果除数为零,程序运行时,会产生一个被零除的错误。
取余运算符(%)的两个操作数都必须是整型数,运算结果是整除后的余数。例如13%3的结果是1。
算术运算的结果可能太大,而不能存储在一个指定的变量中,这种情形称之为溢出。例如:
unsigned char k = 10 * 92. // 溢出: 920 > 255
在进行除运算时,需要注意右操作数,即除数应为非零值,否则就会产生浮点运算错误。编程时,我们通常用if语句判别除数是否为0,例如:
if (a != 0) // 只有a 不等于 0 时才执行下面的操作
c = b / a.
% 为取余运算符,用于把它前面的整数值或表达式除以其后面的整数值或表达式,结果为不能被后面的整数或表达式整除的最小整数,它后面的数值应该为大于1的正整数。如表中所示的"13%7",就表示13 除以7余6。
上面所有的运算符都是双目运算符,左右操作数可以是数值,也可以是表达式。根据左右操作数类型的不同会产生不同的结果。如:9 / 4 = 2,而9 / 4.0 = 2.5、9.0 / 4 =2.5、9.0 / 4.0 = 2.5。
但 % 运算符的左右操作数必须是整数,否则,会产生编译错误。
同时需要注意的是:加法和乘法运算有可能超过计算机能表示的最大数,产生溢出。如:1.e307 * 1.e307则会产生一个不确定数,即计算机不能表示的数。计算机表示的常用数据类型的取值范围可以见下表。
|
表3-2 |
|
类型 |
最小值 |
最大值 |
signed char |
-128 |
127 |
unsigned char |
0 |
255 |
signed short |
-32768 |
32767 |
unsigned short |
0 |
65535 |
signed long |
-2147483648 |
2147483647 |
unsigned long |
0 |
4294967295 |
Float |
-3.402823466e 38F |
3.402823466e 38F |
Double |
-1.7976931348 623158e 308 |
1.7976931348 623158e 308 | |
另外,整型的数值中有不同的类型如字符型、短整型、长整型。他们之间的类型转换需要特别的注意。如: