C++语言程序设计

| 图2-2

如果一个双目运算符两边的操作数类型不同，先要将它们转换为相同的类型，即较低类型转换为较高类型，然后再参加运算。所谓类型的高低，跟所占的存储空间大小有直接关系，所占存储空间越大的类型，级别越高。
图中横向的箭头表示必须的转换，如两个float型数参加运算，虽然它们类型相同，但仍要先转换成double型再进行运算，结果亦为double型。纵向箭头表示当运算符两边的操作数为不同类型时的转换，如一个long型数据与一个int型数据一起运算，需要先将int型数据转换为long型，然后两者再进行运算，结果为long型。所有这些转换都是由系统自动进行的，使用时只需了解结果的类型即可。

| 程序2-2

#include <iostream.h>
void main(void)
{
char a = 'x';
int b = 3,f = 2;
float c = 2.5678;
double d = 5.2345
long e = 32L;
cout<<a - b + d / c - e * f<<endl;
}

下面我们来分析一下这段程序：
（1） 进行d / c运算时，要将c转换成double型，运算的中间结果为double型；
（2） 进行e * f运算时，将f转换为long型，运算的中间结果为long型；
（3） 进行a - b运算时，将a转换为int型（数值为ASCⅡ码值120），运算的中间结果为int型；
（4） 当（3）的中间结果与（1）的中间结果运算时，将（3）的中间结果转换为double型，运算的中间结果为double型；
（5） 当（4）的中间结果与（2）的中间结果运算时，将（2）的中间结果转换为double型，得出最后结果。
于是，程序最后的运行结果为55.038515。