算數轉換
許多的二元運算子 (述二元運算子的運算式) 會造成運算元的轉換,並產生結果相同的方式。 這些運算子會造成轉換的方式稱為 「 一般算術轉換 」。 下表所示,會執行不同的原生型別的運算元的算數轉換。 Typedef 型別會根據其基礎原生型別來運作。
型別轉換的條件
符合的條件 |
轉換 |
---|---|
其中一個運算元屬於型別長 雙。 |
另一個運算元轉換成型別長 雙。 |
型別不符合的條件與任一運算元前是雙。 |
另一個運算元轉換成型別雙。 |
之前不符合的條件與任一運算元屬於型別浮點數。 |
另一個運算元轉換成型別浮點數。 |
之前不符合的條件 (無運算元是浮點型別)。 |
整數提升會執行在運算元上,如下所示:
|
下列程式碼說明表所述的轉換規則:
// 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的乘法運算的結果轉換成型別雙。
在上述範例中的第二個陳述式會顯示額外的浮點數和整數類資料型別, fVal和ulVal。 ulVal變數轉換成型別浮點數 (在資料表中的第三個條件)。 加法結果的轉換成型別雙 (第二個資料表中的條件) 和硌巖緻dVal。