算术转换

许多二元运算符 (讨论在 与二元运算符的表达式) 会导致操作数和 yield 发生转换方法相同。 这种这些运算符原因将名为 “通常算术转换”。如下表所示,不同的本机类型的操作数算术转换执行。 Typedef 类型是基于其基础的本机类型的行为。

类型转换的条件

匹配的情况

转换

其中一个操作数是类型 long 二进制文件

将其他操作数类型 long 二进制文件

上述情况不匹配的和其中一个操作数是类型 二进制文件

将其他操作数类型 二进制文件

上述情况不匹配的和其中一个操作数是类型 float

将其他操作数类型 float

未满足上述情况 (操作数都不是浮点的类型)。

整数提升在操作数执行如下所示:

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

  • 如果,并且,如果其中一个操作数是类型 long 和其他类型 unsigned int,两个操作数转换未满足上述情况键入 unsigned long。

  • 如果上面的两个不符合条件,则,并且,如果其中一个操作数是类型 long,将另一个操作数类型 long

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

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

下面的代码阐释在表中描述的转换规则:

// arithmetic_conversions.cpp
double dVal;
float fVal;
int iVal;
unsigned long ulVal;

int main() {
   // iVal converted to unsigned long
   // result of multiplication converted to double
   dVal = iVal * ulVal;

   // ulVal converted to float
   // result of addition converted to double
   dVal = ulVal + fVal;
}

前面示例中的第一个语句演示两个整型、 iVal 和 ulVal的乘法。 满足的条件为两个操作数不是浮点的类型,并且一个操作数是类型 unsigned int。 因此,转换,另一个操作数, iVal键入 unsigned int。 该结果分配给 dVal。 满足的条件是一个操作数是类型 二进制文件;因此,转换相乘的 unsigned int 结果键入 二进制文件

前面示例中的第二个语句演示 float 和一个整型添加, fVal 和 ulVal。 转换 ulVal 变量键入 float (第三个条件在表中)。 转换添加的结果键入 二进制文件 (第二个条件在表中) 并将其分配给 dVal。

请参见

参考

标准转换