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 );
    }
    
    尝试一下
    此处应注意,强制转换运算符的优先级高于除法,因此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 );
    }
    
    尝试一下
    在这里,sum的值为116,因为编译器在执行实际加法运算之前正在进行整数提升并将'c'的值转换为ASCII。
  • 通常的算术转换

    通常的算术转换是隐式执行的,以将它们的值转换为公共类型。编译器首先执行整数提升;如果操作数仍然具有不同的类型,则将它们转换为在以下层次结构中出现的最高类型
    casting
    通常不对赋值运算符执行逻辑运算,也不对逻辑运算符&&和||执行运算。让我们以以下示例来了解概念-
    
    #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”结果。