C Primer Plus 第5章 运算符、表达式和语句 5.5 类型转换
1、当出现在表达式里时,有符号和无符号的char和short类型都将被自动转换为int,在需要的情况下,将自动被转换为unsigned int。在K&RC下,但不是在当前的C下,folat将被自动转换为double.因为是转换成较大的类型,所以这些转换被称为提升。 2、在包含两种数据类型的任何运算里,两个值都被转换成两种类型里较高的级别。 3、类型从高到低的顺序是:long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int 、int。一个可能是例外是当long和int具有相同的大小时,此时unsigned int比long的级别更高。之所以short和char类型没有出现在此清单里,是因为他们已经被提升为int或也可能被提升为unsigned int。 4、在赋值语句里,计算的最后结果将被转换成将要被赋于值的那个变更的类型。 5、当被作为函数的参数传递时,char和short会被转换为int,folat会被转换为double。 提升通常是一个平滑的无损害的过程,但是降级可能导致真正的问题。原因很简单,一个较低级别的类型可能不够大,不能存放一个完整的数。 程序清单5.14 convert.c /*convert.c --自动类型转换*/ #include <stdio.h>