C型铸造
将一种数据类型转换为另一种数据类型称为类型转换或类型转换。例如,如果要将“long”值存储为简单整数,则可以键入cast 'long' to 'int'。您可以使用强制转换运算符将值从一种类型显式转换为另一种类型,如下所示 -
(type_name) expression
考虑以下示例,其中强制转换运算符导致一个整型变量除以另一个整型变量作为浮点运算执行 -
#include <stdio.h> main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean ); }
当上面的代码被编译并执行时,它会产生以下结果 -
Value of mean : 3.400000
这里应该注意的是,强制转换运算符优先于除法,因此sum的值首先转换为double类型,最后除以 count 产生一个 double 值。
类型转换可以是隐式的,由编译器自动执行,也可以通过使用强制转换运算符显式指定。每当需要类型转换时,使用强制转换运算符被认为是良好的编程实践。
整数提升
整数提升是将比int或unsigned int “小的”整数类型的值转换为int或unsigned 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\n", sum ); }
当上面的代码被编译并执行时,它会产生以下结果 -
Value of sum : 116
这里,sum 的值为 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\n", sum ); }
当上面的代码被编译并执行时,它会产生以下结果 -
Value of sum : 116.000000
在这里,很容易理解,第一个 c 被转换为整数,但由于最终值为 double,因此应用通常的算术转换,编译器将 i 和 c 转换为“浮点”并将它们相加,产生“浮点”结果。