首页 百科知识 转换数值类型教程

转换数值类型教程

时间:2023-10-17 百科知识 版权反馈
【摘要】:所谓“自动类型转换”是系统根据规则自动将两个不同数据类型的运算对象转换成同一种数据类型的过程。不要理解为int型先转换成unsigned int型,再转换成long型,再转换成double型。同理,一个int型数据与一个long型数据进行运算,是将int型直接转换成long型。若是无法避免不同类型的数据出现在同一语句中,C语言提供了另一个功能可克服上面的问题,那就是数据的强制类型转换。

2.5.1 自动类型转换

所谓“自动类型转换”是系统根据规则自动将两个不同数据类型的运算对象转换成同一种数据类型的过程。而且,对于某些数据类型,即使是两个运算对象的数据类型完全相同,也要做转换,如char、float。

转换的原则是:为两个运算对象的计算结果尽可能提供多的存储空间。具体规则如图2.5.1所示。

img128

图2.5.1 自动类型转换规则

图中横向向左的箭头表示必定的转换,如char型数据、short型数据必定先转换为int型,float型数据在运算时一律先转换成double型,提高运算精度(即使是两个float型数据相加,也都先转换成double型,然后再相加)。

纵向的箭头表示当运算对象为不同类型时转换的方向。例如int型与double型数据进行运算时,先将int型数据转换成double型,然后再进行运算,结果为double型。

注意:箭头方向只表示数据类型级别的高低,由低向高转换。不要理解为int型先转换成unsigned int型,再转换成long型,再转换成double型。如果一个int型数据与一个double型数据进行运算,是直接将int型数据转换成double型。同理,一个int型数据与一个long型数据进行运算,是将int型直接转换成long型。其他依此类推。

假设已指定i为int型变量,f为float型变量,d为double型变量,e为long型,有如下表达式:

  25+'c'+i* f−d/e

计算机在执行时自左至右扫描,运算次序为:(1)进行25+'c'的运算,先将'c'转换成整数99,运算结果为124。(2)由于“*”比“+”优先,先进行i*f的运算。先将i与f都转换成double型,运算结果为double型。(3)整数124与i*f的积相加。先将整数124转换成double型,结果为double型。(4)将变量e化成double型,d/e结果为double型。(5)将25+'c'+i* f的结果与d/e的商相减,结果为double型。

上述的类型转换是由系统自动进行的。

需要说明的是,自动类型转换只针对两个运算对象,不能对表达式的所有运算符做一次性的自动类型转换。

例如,表达式6/4+6.7的计算结果为7.7,而表达式6.0/4+6.7的计算结果为8.2,原因是6/4按整型计算,并不因为6.7是浮点型而将其按浮点型计算。

从以上运算可知,若读者是一位初学者,可能会被不同类型的数据的运算搞得晕头转向。所以在设计程序时,最好的方法是尽量避免不同类型的数据在同一语句中出现。

若是无法避免不同类型的数据出现在同一语句中,C语言提供了另一个功能可克服上面的问题,那就是数据的强制类型转换。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈