首页 理论教育C语言程序设计:自动转换的实例与原理

C语言程序设计:自动转换的实例与原理

【摘要】:图2.4中,横向向左的箭头表示必定发生的转换。如果将一个实型数据赋值给一个整型变量,那么将舍弃实型数据的小数部分。例如,将2.12赋值给整型变量i,结果为2。图2.5自动转换int型与1ong型。

1.自动转换

自动转换发生在不同类型数据混合运算时,由编译系统自动完成。在进行运算时,不同类型的数据需要先转换成同一类型,然后进行运算。一般情况下,数据类型的转换由低类型向高类型转换,如short转换为int,如图2.5所示。

图2.4中,横向向左的箭头表示必定发生的转换。如果字符数据参与运算,则必定转换为整型;如果float数据参与运算,则必须转换为双精度型。例如:假设已经指定i为整型变量,f为float变量,d为double型变量,表达式为:

10+’a’+i*f-d/2

运算次序为:

(1)进行i*f运算,先将i和f转换成double型,运算结果为double型;

(2)进行d/2运算,将常量2转换成double型,d/2为double型;

(3)进行10+’a’运算,先将’a’转换成整数97,再加10,结果为整型107;

(4)整数107与i*f的积相加,结果为double型;

(5)最后结果为double型。

2.赋值转换

当赋值运算符两边的运算对象类型不同时,将要发生类型转换,转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。具体的转换如下:(www.chuimin.cn)

(1)float型与int型。

如果将一个实型数据赋值给一个整型变量,那么将舍弃实型数据的小数部分。例如,将2.12赋值给整型变量i,结果为2。将整型值赋给实型变量时,数值不变,只将其形式改为浮点形式,即小数点后带若干个0。

(2)double型与float型。

将一个double型数据赋给float型变量时,截取其前面7位有效数字,存放在float型变量存储单元中;

(3)int型与char型。

将一个int型数据赋给char型变量时,只将其低8位传送到char型变量,高位部分舍弃,这可能会得到一个完全不一样的结果,所以不提倡这种做法。将char型数值赋给int型变量时,一些编译程序不管其值大小都作正数处理,而另一些编译程序在转换时,若char型数据值大于127,就作为负数处理。

图2.5 自动转换

(4)int型与1ong型。

long型数据赋给int型变量时,将低16位值传送给int型变量,而将高16位截断舍弃。将int型数据送给long型变量时,其外部值保持不变,而内部形式有所改变。