C - 类型铸造
将一种数据类型转换为另一种数据类型称为类型转换或类型转换。例如,如果您想将一个“long”值存储为一个简单的整数,那么您可以键入 cast 'long' to 'int'。您可以使用 cast 运算符 将值从一种类型显式转换为另一种类型 如下 -
(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 值。
类型转换可以是由编译器自动执行的隐式转换,也可以通过使用 cast 运算符 显式指定 .每当需要进行类型转换时,使用强制转换运算符被认为是一种良好的编程习惯。
整数提升
整数提升是整数类型的值“小于”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\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 转换为“float”并将它们相加产生“float”结果。主页>
C语言