类型转换是一种可从一种数据类型转换成另一种数据类型。例如,如果要存储一个long值成一个简单的整数(int),那么可以强制类型转换long为int。可以从一种类型显式使用转换运算符值转换到另一个值,如下:
(type_name) expression
请看下面的例子中,两个整型除运算转换为浮点数:
#include <stdio.h> main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f ", mean ); }
当上述代码被编译和执行时,它产生了以下结果:
Value of mean : 3.400000
这里要注意的是,转换运算符的优先级高于除法运算,sum值首先被转换为double类型,最后它被除以count的double值。
类型转换可以是隐式的由编译器自动地进行,也可以明确地通过使用转换运算符的指定。它被认为是良好的编程习惯使用转换运算符时类型转换是必要的。
整数推进
整型提升是由整型值比 int 或unsigned int类型小,转换为 int 或 unsigned int。考虑一个 int 加入一个字符的例子:
#include <stdio.h> main() { int i = 17; char c = 'c'; /* ascii value is 99 */ int sum; sum = i + c; printf("Value of sum : %d ", sum ); }
让我们编译和运行上面的程序,这将产生以下结果:
Value of sum : 116
在这里,总和值为116,因为编译器正在做整型提升和实际执行加法运算之前,将'C'的值转换为ASCII码。
正常的算术转换
通常的算术转换是隐式进行投中一个常见的类型的值。编译器首先执行整数促销,如果操作数仍有不同类型那么他们将被转换为出现在最高的层次结构如下类型:
不执行的赋值操作符通常的算术转换,也不是逻辑运算符&&和||。让我们看看下面的例子来理解这个概念:
#include <stdio.h> main() { int i = 17; char c = 'c'; /* ascii value is 99 */ float sum; sum = i + c; printf("Value of sum : %f ", sum ); }
让我们编译和运行上面的程序,这将产生以下结果:
Value of sum : 116.000000
在这里,它是简单的理解,第一个c被转换成整数,但由于最终值是double,因此正常的算术转换应用,编译器转换 i 和 c 成 float 并增加产生一个float结果。