一般算術轉換
大部分的 C 運算子會執行類型轉換,將運算式的運算元轉換為一般類型,或是將短值擴充為電腦作業中使用的整數大小。 C 運算子執行的轉換取決於特定運算子與運算元的類型。 不過,許多運算子會對整數和浮動類型的運算元執行類似轉換。 這些轉換稱為「算術轉換」。將操作數值轉換成相容的類型,不會變更其值。
以下摘要說明的算術轉換稱為「一般算術轉換」。這些步驟僅適用於預期算術類型的二進位運算符。 目的是產生一般類型 (也是結果的類型)。 為判斷實際發生的轉換,編譯器會對運算式中的二進位運算套用下列演算法。 下列步驟並非優先順序。
如果任一運算元的類型是
long double
,就會將另一個運算元轉換成long double
類型。如果不符合上述條件,且任一操作數的類型為
double
,則另一個操作數會轉換成 類型double
。如果不符合上述兩個條件,且任一操作數的類型為
float
,則另一個操作數會轉換成 類型float
。如果不符合上述三個條件 (運算元都不是浮動類型),則會對運算元執行整數轉換,如下所示:
如果任一運算元的類型是
unsigned long
,就會將另一個運算元轉換成unsigned long
類型。如果不符合上述條件,且任一操作數的類型
long
為 ,而另一個類型unsigned int
為 ,則這兩個操作數都會轉換成 類型unsigned long
。如果不符合上述兩個條件,且任一操作數的類型為
long
,則另一個操作數會轉換成 類型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
*/