
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.5 数据类型的自动转换和强制转换
1.数据类型的自动转换
C语言中数据类型的自动转换如图2-1所示。
(1)当同一表达式中各数据的类型不同时,编译程序会自动把它们转变为同一类型后再进行计算。
(2)转换优先级为:char<int<float<double,即左边级别低的类型向右边级别高的类型转换。
(3)在做赋值运算时,若赋值号左右两边的类型不同,则赋值号右边的类型向左边的类型转换;当右边的类型高于左边的类型时,则在转换时对右边的数据进行截取。

图2-1 C语言中数据类型的自动转换
2.数据类型的强制转换
如果一个运算符两侧的类型不同,则系统会自动进行类型转换,也可以用类型转换符把一个数据强制转换成所需要的类型,其使用方法如下:

例如:

应把需要转换的数据或类型用圆括号括起来,以免只将其中一部分作转换。如上式写成:

其结果只是把s的类型作了转换。这种转换只是把数据按某一种类型作运算,而并不是改变这个数据本身的类型,例如:

它只是把s*t的运算结果强制转换为long型,再除以s2,并把结果赋给s1,而s和t的类型仍未改变,仍然是double型。
注意
系统虽然能够自动地进行类型转换,但它只能由低向高进行转换,如由int型转换为double型,而不能进行由高向低的转换,如不能把double型转换为int型,这时可以用强制类型转换符进行由高向低的方向转换。