通常算术转换

大多数 C 运算符执行类型转换到通用类型将表达式的操作数或对计算机操作的整数范围扩展短的值。 C 运算符执行的转换取决于特定运算符和一个或多个操作数的类型。 但是,许多运算符对整型和浮点类型的操作数的类似变换。 这些转换称为 “算术转换”。操作数值转换为一个兼容的类型不会对其值。

下面总结的算术转换称为 “通常算术转换”。这些步骤仅应用程序需要算术类型的二进制运算符。 该目的是为了为也是该结果的类型的通用类型。 若要确定哪些转换实际上出现,编译器将以下算法于表达式中的二元运算。 下面的步骤不是优先级序列。

  1. 如果其中一个操作数是类型 long double,将另一个操作数类型 long double。

  2. 如果上述条件不满足,并且其中一个操作数是类型 二进制文件,将另一个操作数类型 二进制文件

  3. 如果上述两个不符合条件,并且其中一个操作数是类型 float,将另一个操作数类型 float

  4. 如果上述三个不符合条件 (操作数都不是浮点的类型),则集成将操作数执行如下所示:

    • 如果其中一个操作数是类型 unsigned long,将另一个操作数类型 unsigned long。

    • 如果上述条件不满足,并且其中一个操作数是类型 long 和其他类型 unsigned int,将两个操作数类型 unsigned long。

    • 如果上述两个条件不满足,而且,其中一个操作数是类型 long,将另一个操作数类型 long

    • 如果上述三个不符合条件,并且,其中一个操作数是类型 unsigned int,将另一个操作数类型 unsigned int。

    • 如果上述条件都不匹配,将两个操作数类型 int。

下面的代码阐释这些转换规则:

float   fVal;
double  dVal;
int   iVal;
unsigned long ulVal;

dVal = iVal * ulVal; /* iVal converted to unsigned long
                      * Uses step 4.
                      * Result of multiplication converted to double 
                      */
dVal = ulVal + fVal; /* ulVal converted to float
                      * Uses step 3.
                      * Result of addition converted to double 
                      */ 

请参见

参考

C运算符