共用方式為


一般的算數轉換

大部分的 c 運算子會執行,將運算式的運算元為一般型別,或擴充電腦的操作中使用的整數大小的短值的型別轉換。 執行的 c 運算子的轉換是根據特定的運算子和運算元或運算元的型別而定。 不過,許多運算子會執行類似轉換在整數和浮點型別的運算元。 這些轉換稱為 「 算術轉換 」。 運算元值轉換成相容的型別會導致不會變更它的值。

摘要如下的算數轉換稱為 「 一般算術轉換 」。 這些步驟只申請預期算術型別的二元運算子。 目的是要產生這也是結果的型別為一般型別。 如果要判斷哪一個轉換確實會發生,編譯器會將下列的演算法套用到二元運算的運算式中。 下列步驟並非其優先順序。

  1. 如果運算元的型別都是long double,另一個運算元轉換成型別long double。

  2. 如果不符合上述條件,其中一個運算元屬於型別,另一個運算元轉換成型別

  3. 如果不符合上述的兩個條件,其中一個運算元屬於型別浮點數,另一個運算元轉換成型別 浮點數

  4. 如果不符合上述的三個條件 (無運算元是浮點型別),然後在整數轉換為運算元上執行,如下所示:

    • 如果運算元的型別都是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 
                      */ 

請參閱

參考

C 運算子