共用方式為


算術轉換

許多二元運算子 (在以二元運算子構成的運算式中討論) 會導致運算元的轉換,並以相同的方式產生結果。 導致這些運算子進行轉換的方式稱為「一般算術轉換」。針對不同原生類型的運算元執行算術轉換如下表所示。 Typedef 類型是根據其基礎原生類型而運作。

類型轉換的條件

符合條件

轉換

任一個運算元的類型為 long double

其他運算元會轉換為類型 long double

不符合上述條件,且任一個運算元的類型為 double

其他運算元會轉換為 double

不符合上述條件,且任一個運算元的類型為 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。 符合的條件是其中一個運算元為類型 double,因此,unsigned int 相乘的結果會轉換成 double 類型。

上述範例中的第二個陳述式顯示 float 和整數資料類型 (fVal 和 ulVal) 的加法。 ulVal 變數會轉換成 float (資料表中的第三個條件)。 加法的結果會轉換成 double 類型 (資料表中的第二個條件) 並指派給 dVal。

請參閱

參考

標準轉換