共用方式為


算數轉換

許多的二元運算子 (述二元運算子的運算式) 會造成運算元的轉換,並產生結果相同的方式。 這些運算子會造成轉換的方式稱為 「 一般算術轉換 」。 下表所示,會執行不同的原生型別的運算元的算數轉換。 Typedef 型別會根據其基礎原生型別來運作。

型別轉換的條件

符合的條件

轉換

其中一個運算元屬於型別 

另一個運算元轉換成型別 

型別不符合的條件與任一運算元前是

另一個運算元轉換成型別

之前不符合的條件與任一運算元屬於型別浮點數

另一個運算元轉換成型別浮點數

之前不符合的條件 (無運算元是浮點型別)。

整數提升會執行在運算元上,如下所示:

  • 如果運算元的型別都是unsigned,另一個運算元轉換成型別unsigned long。 

  • 如果之前的條件不符合,且其中一個運算元屬於型別 ,而另一個型別的unsignedint,這兩個運算元都轉換為輸入unsigned 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的乘法運算的結果轉換成型別

在上述範例中的第二個陳述式會顯示額外的浮點數和整數類資料型別, fVal和ulVal。 ulVal變數轉換成型別浮點數 (在資料表中的第三個條件)。 加法結果的轉換成型別 (第二個資料表中的條件) 和硌巖緻dVal。

請參閱

參考

標準轉換