C語言類型轉換
類型轉換是一種可從一種數據類型轉換成另一種數據類型。例如,如果要存儲一個long值成一個簡單的整數(int),那麼可以強製類型轉換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 ", mean ); }
當上述代碼被編譯和執行時,它產生了以下結果:
Value of mean : 3.400000
這裡要注意的是,轉換運算符的優先級高於除法運算,sum值首先被轉換為double類型,最後它被除以count的double值。
類型轉換可以是隱式的由編譯器自動地進行,也可以明確地通過使用轉換運算符的指定。它被認為是良好的編程習慣使用轉換運算符時類型轉換是必要的。
整數推進
整型提升是由整型值比 int 或unsigned int類型小,轉換為 int 或 unsigned int。考慮一個 int 加入一個字符的例子:
#include <stdio.h> main() { int i = 17; char c = 'c'; /* ascii value is 99 */ int sum; sum = i + c; printf("Value of sum : %d ", sum ); }
讓我們編譯和運行上麵的程序,這將產生以下結果:
Value of sum : 116
在這裡,總和值為116,因為編譯器正在做整型提升和實際執行加法運算之前,將'C'的值轉換為ASCII碼。
正常的算術轉換
通常的算術轉換是隱式進行投中一個常見的類型的值。編譯器首先執行整數促銷,如果操作數仍有不同類型那麼他們將被轉換為出現在最高的層次結構如下類型:
不執行的賦值操作符通常的算術轉換,也不是邏輯運算符&&和||。讓我們看看下麵的例子來理解這個概念:
#include <stdio.h> main() { int i = 17; char c = 'c'; /* ascii value is 99 */ float sum; sum = i + c; printf("Value of sum : %f ", sum ); }
讓我們編譯和運行上麵的程序,這將產生以下結果:
Value of sum : 116.000000
在這裡,它是簡單的理解,第一個c被轉換成整數,但由於最終值是double,因此正常的算術轉換應用,編譯器轉換 i 和 c 成 float 並增加產生一個float結果。