购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4.1 一般表达式中的自动数据类型转换

除了赋值表达式,一般表达式中整型、实型和字符型数据可以进行混合运算,在进行运算时,不同类型的数据要先转换成相同类型的数据。在VC++2010中,不同类型数据的转换规则如表2-7所示。

表2-7 VC++2010中不同类型数据的转换规则

说明

1)在运算过程中,有些数据需要进行类型的提升,以提高运算精度。如果一个数据是short型或char型,首先将二者转换为int型,然后再进行运算。例如,已知

计算ch2-ch1;的值时,运算次序如下:

· 首先将ch1和ch2的值转换为int型。

· 然后进行减法运算,最后表达式值的类型是int型。

2)通过类型提升转换后,如果参与运算的数据类型仍不相同,不同类型的数据要先转换成同一类型的数据,然后进行运算。转换的规则是“由低向高”,也就是说,一个表达式的值的类型是其中各个参与运算的数据中级别最高的类型。例如,已知

计算表达式5+'a'+i/f-d*e的值时,运算次序如下:

· 进行5+'a'运算,将'a'转换为int型97,然后相加,结果为102,是int型。

· 进行i/f运算,将i和f都转换为double型,然后相除,结果为double型。

· 将5+'a'运算结果102转换为double型,然后和i/f运算结果相加,结果为double型。

· 进行d*e运算,将e转换为double型,然后相乘,结果为double型。

· 将5+'a'+i/f的结果与d*e的结果相减,最后的结果为double型。

了解转换过程可以控制运算的结果。例如,已知三角形的底为15,高为20,如果把求面积的算术表达式写为1/2*15*20;,结果面积为0,产生这种错误结果的原因是:1/2是两个整型数相除,结果为0,从而导致面积为0。如果把表达式改写为1.0/2*15*20或1/2.0*15*20;或1.0/2.0*15*20;,因为1.0/2是一个int型数和一个double型数相除,可以转换为两个double型数相除,所以结果为0.5,从而最后计算出面积为150.0。

以上转换过程是系统自动进行的,也可以称为隐式类型转换,下面将介绍的强制类型转换也可以称为显式类型转换。 krTc8AG2ycSQGobWrAb27k+Aru7yBXxBn+vkTIcUUSGSeKGuqj8HsEfKm39x7ea/

点击中间区域
呼出菜单
上一章
目录
下一章
×