C - 类型转换

类型转换是一种将变量从一种数据类型转换为另一种数据类型的方法.例如,如果要将"long"值存储到一个简单的整数中,则可以将"long"类型键入"int".您可以使用强制转换运算符将值从一种类型转换为另一种类型,如下所示 :

 
(type_name)表达式

考虑以下示例,其中强制转换运算符导致一个整数变量除以另一个整数变量作为浮点运算执行 :

#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 ,最后它除以计数产生一个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.

通常的算术转换

通常的算术转换将其值转换为公共类型.编译器首先执行整数提升;如果操作数仍然具有不同的类型,则它们将转换为在以下层次结构中显示最高的类型 :

通常的算术转换

通常的算术转换不是针对赋值运算符执行的,也不是针对逻辑运算符&&amp ;;和||.让我们以下面的例子来理解概念 :

#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'结果.