一般的算數轉換
大部分的 c 運算子會執行,將運算式的運算元為一般型別,或擴充電腦的操作中使用的整數大小的短值的型別轉換。 執行的 c 運算子的轉換是根據特定的運算子和運算元或運算元的型別而定。 不過,許多運算子會執行類似轉換在整數和浮點型別的運算元。 這些轉換稱為 「 算術轉換 」。 運算元值轉換成相容的型別會導致不會變更它的值。
摘要如下的算數轉換稱為 「 一般算術轉換 」。 這些步驟只申請預期算術型別的二元運算子。 目的是要產生這也是結果的型別為一般型別。 如果要判斷哪一個轉換確實會發生,編譯器會將下列的演算法套用到二元運算的運算式中。 下列步驟並非其優先順序。
如果運算元的型別都是long double,另一個運算元轉換成型別long double。
如果不符合上述條件,其中一個運算元屬於型別雙,另一個運算元轉換成型別 雙。
如果不符合上述的兩個條件,其中一個運算元屬於型別浮點數,另一個運算元轉換成型別 浮點數。
如果不符合上述的三個條件 (無運算元是浮點型別),然後在整數轉換為運算元上執行,如下所示:
如果運算元的型別都是unsigned long,另一個運算元轉換成型別unsigned long。
如果不符合上述條件,其中一個運算元屬於型別長 ,而另一個型別的unsigned int,這兩個運算元都轉換為輸入unsigned long。
如果不符合上述的兩個條件,且其中一個運算元屬於型別長,另一個運算元轉換成型別 長。
如果不符合上述的三個條件,且其中一個運算元屬於型別unsigned int,另一個運算元轉換成型別unsigned int。
如果沒有上述的條件都符合時,這兩個運算元都轉換成型別int。
下列程式碼將說明這些轉換規則:
float fVal;
double dVal;
int iVal;
unsigned long ulVal;
dVal = iVal * ulVal; /* iVal converted to unsigned long
* Uses step 4.
* Result of multiplication converted to double
*/
dVal = ulVal + fVal; /* ulVal converted to float
* Uses step 3.
* Result of addition converted to double
*/