Cprogramming 简明教程
Type Casting in C
术语 "类型转换" 指的是将一种数据类型转换为另一种数据类型。它也称为 "类型转换"。在某些时候,编译器会自行进行转换(隐式类型转换),以便数据类型彼此兼容。
在其他情况下,C 编译器会强制执行类型转换(显式类型转换),这是由类型转换运算符引起的。例如,如果要将 'long' 值存储到一个简单整数中,那么可以将 'long' 类型转换为 'int' 类型。
可以使用类型转换运算符将值从一种类型显式转换为另一种类型:
(type_name) expression
Example 1
考虑以下示例 −
#include <stdio.h>
int main() {
int sum = 17, count = 5;
double mean;
mean = sum / count;
printf("Value of mean: %f\n", mean);
}
Example 2
在 C 中,除法运算的结果始终是字节长度更大的数据类型。因此,我们必须将其中一个整数操作数类型化为{@s6}。
强制类型转换运算符将一个整型变量与另一个整型变量之间的除法运算作为浮点运算 −
#include <stdio.h>
int main() {
int sum = 17, count = 5;
double mean;
mean = (double) sum / count;
printf("Value of mean: %f\n", mean);
}
Rules of Type Promotions
执行隐式或自动类型转换时,C 编译器遵循类型提升规则。遵循的原则是 −
-
字节和短整数 values − 将其提升为 int。
-
如果一个操作数为 long − 整个表达式提升为 long。
-
如果一个操作数为 float − 整个表达式提升为 float。
-
如果任何操作数为 double − 结果提升为 double。
Usual Arithmetic Conversion
对于赋值运算符或逻辑运算符 && 和 ||,不会执行常见的算术转换。
Example
让我们看以下示例,以理解这个概念 −
#include <stdio.h>
int 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”结果。