C 強制型別轉換


強制型別轉換是把變數從一種型別轉換成另一種資料型別。例如,如果您想要儲存一個 long 類型的值到一個簡單的整型中,您需要把 long 類型強制轉換為 int 類型。您可以使用強制類型轉換運算子來把值明確地從一種類型轉換為另一種類型,如下所示:

(type_name) expression

請看下面的實例,使用強制類型轉換運算子把一個整數變數除以另一個整數變量,得到一個浮點數:

#include <stdio.h>main(){   int sum = 17, count = 5;   double mean;

   mean = (double) sum / count;
   printf("Value of mean : %f\n", mean );}

當上面的程式碼被編譯和執行時,它會產生下列結果:

Value of mean : 3.400000

這裡要注意的是強制型別轉換運算子的優先權大於除法,因此sum 的值先轉換成double 型,然​​後除以count,得到一個型別為double 的值。

型別轉換可以是隱式的,由編譯器自動執行,也可以是明確的,透過使用強制型別轉換運算子來指定。在程式設計時,有需要型別轉換的時候都用強制型別轉換運算符,是一種好的程式設計習慣。

整數提升

整數提升是指將小於intunsigned int 的整數型別轉換成intunsigned int 的過程。請看下面的實例,在int 中加入一個字元:

#include <stdio.h>main(){   int  i = 17;   char c = 'c'; /* ascii 值是 99 */   int sum;

   sum = i + c;
   printf("Value of sum : %d\n", sum );}

當上面的程式碼被編譯和執行時,它會產生下列結果:

Value of sum : 116

在這裡,sum 的值為116,因為編譯器進行了整數提升,在執行實際加法運算時,把'c' 的值轉換為對應的ascii 值。

常用的算術轉換

常用的算術轉換是隱含地把值強制轉換為相同的型別。編譯器首先執行整數提升,如果運算元類型不同,則它們會轉換為下列層級中出現的最高層次的類型:

1056.png

常用的算術轉換不適用於賦值運算子、邏輯運算子&& 和||。讓我們看看下面的實例來理解這個概念:

#include <stdio.h>main(){   int  i = 17;   char c = 'c'; /* ascii 值是 99 */   float sum;

   sum = i + c;
   printf("Value of sum : %f\n", sum );}

當上面的程式碼被編譯和執行時,它會產生下列結果:

Value of sum : 116.000000

在這裡,c 首先被轉換為整數,但由於最後的值是double 型的,所以會應用常用的算術轉換,編譯器會把i 和c 轉換為浮點型,並把它們相加得到一個浮點數。