算术转换

许多二元运算符 (讨论在 与二元运算符的表达式) 会导致操作数和 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。

请参见

参考

标准转换