算術轉換
許多二元運算子 (在以二元運算子構成的運算式中討論) 會導致運算元的轉換,並以相同的方式產生結果。 導致這些運算子進行轉換的方式稱為「一般算術轉換」。針對不同原生類型的運算元執行算術轉換如下表所示。 Typedef 類型是根據其基礎原生類型而運作。
類型轉換的條件
符合條件 |
轉換 |
---|---|
任一個運算元的類型為 long double。 |
其他運算元會轉換為類型 long double。 |
不符合上述條件,且任一個運算元的類型為 double。 |
其他運算元會轉換為 double。 |
不符合上述條件,且任一個運算元的類型為 float。 |
其他運算元會轉換為 float。 |
不符合上述條件 (所有運算元都不是浮動類型)。 |
在運算元上執行整數提升如下:
|
下列程式碼說明表格中所述的這些轉換規則:
// 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。