类型转换(Type Casting)
优质
小牛编辑
137浏览
2023-12-01
类型转换是一种将变量从一种数据类型转换为另一种数据类型的方法。 例如,如果要将“long”值存储到一个简单的整数中,则可以将“long”类型键入“int”。 您可以使用强制转换cast operator将值从一种类型转换为另一种类型,如下所示 -
(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 operator显式指定。 每当需要类型转换时,使用强制转换运算符被认为是一种很好的编程习惯。
整数推广
整数提升是将整数类型“小于” 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。
通常的算术转换
隐式执行usual arithmetic conversions以将其值转换为公共类型。 编译器首先执行integer promotion ; 如果操作数仍然具有不同的类型,则它们将转换为在以下层次结构中显示最高的类型 -
通常的算术转换不是为赋值运算符执行,也不是为逻辑运算符&&和||执行。 让我们以下面的例子来理解这个概念 -
#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'结果。