C/C++ 中的类型转换是什么?


类型转换是一种将变量从一种数据类型转换为另一种数据类型的方法。例如,如果要将一个 'long' 值存储到一个简单的整数中,则可以将 '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\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 转换为 'float' 并将它们相加,从而得到一个 'float' 结果。

更新于: 2019-07-30

299 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.