本教程操作環(huán)境:windows7系統(tǒng)、c99版本、Dell G3電腦。
數(shù)據(jù)類型轉(zhuǎn)換就是將數(shù)據(jù)(變量、數(shù)值、表達(dá)式的結(jié)果等)從一種類型轉(zhuǎn)換為另一種類型。
(資料圖片)
c語言有兩種數(shù)據(jù)類型方式:
自動(dòng)類型轉(zhuǎn)換:就是編譯器默默地、隱式地、偷偷地進(jìn)行的數(shù)據(jù)類型轉(zhuǎn)換,這種轉(zhuǎn)換不需要程序員干預(yù),會自動(dòng)發(fā)生。
強(qiáng)制類型轉(zhuǎn)換
下面我們就詳細(xì)了解一下c語言的強(qiáng)制類型轉(zhuǎn)換。
強(qiáng)制類型轉(zhuǎn)換
自動(dòng)類型轉(zhuǎn)換是編譯器根據(jù)代碼的上下文環(huán)境自行判斷的結(jié)果,有時(shí)候并不是那么“智能”,不能滿足所有的需求。如果需要,程序員也可以自己在代碼中明確地提出要進(jìn)行類型轉(zhuǎn)換,這稱為強(qiáng)制類型轉(zhuǎn)換。
自動(dòng)類型轉(zhuǎn)換是編譯器默默地、隱式地進(jìn)行的一種類型轉(zhuǎn)換,不需要在代碼中體現(xiàn)出來;強(qiáng)制類型轉(zhuǎn)換是程序員明確提出的、需要通過特定格式的代碼來指明的一種類型轉(zhuǎn)換。換句話說,自動(dòng)類型轉(zhuǎn)換不需要程序員干預(yù),強(qiáng)制類型轉(zhuǎn)換必須有程序員干預(yù)。
強(qiáng)制類型轉(zhuǎn)換的格式為:
(type_name) expression
type_name為新類型名稱
expression為表達(dá)式
例如:
(float) a; //將變量 a 轉(zhuǎn)換為 float 類型(int)(x+y); //把表達(dá)式 x+y 的結(jié)果轉(zhuǎn)換為 int 整型(float) 100; //將數(shù)值 100(默認(rèn)為int類型)轉(zhuǎn)換為 float 類型
請看下面的實(shí)例,使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符把一個(gè)整數(shù)變量除以另一個(gè)整數(shù)變量,得到一個(gè)浮點(diǎn)數(shù):
#include <stdio.h> int main(){ int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean ); }這里要注意的是強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的優(yōu)先級大于除法,因此 sum 的值首先被轉(zhuǎn)換為 double 型,然后除以 count,得到一個(gè)類型為 double 的值。
類型轉(zhuǎn)換可以是隱式的,由編譯器自動(dòng)執(zhí)行,也可以是顯式的,通過使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符來指定。在編程時(shí),有需要類型轉(zhuǎn)換的時(shí)候都用上強(qiáng)制類型轉(zhuǎn)換運(yùn)算符,是一種良好的編程習(xí)慣。
類型轉(zhuǎn)換只是臨時(shí)性的
無論是自動(dòng)類型轉(zhuǎn)換還是強(qiáng)制類型轉(zhuǎn)換,都只是為了本次運(yùn)算而進(jìn)行的臨時(shí)性轉(zhuǎn)換,轉(zhuǎn)換的結(jié)果也會保存到臨時(shí)的內(nèi)存空間,不會改變數(shù)據(jù)本來的類型或者值。請看下面的例子:
#include <stdio.h>int main(){ double total = 400.8; //總價(jià) int count = 5; //數(shù)目 double unit; //單價(jià) int total_int = (int)total; unit = total / count; printf("total=%lf, total_int=%d, unit=%lf\n", total, total_int, unit); return 0;}注意看第 6 行代碼,total 變量被轉(zhuǎn)換成了 int 類型才賦值給 total_int 變量,而這種轉(zhuǎn)換并未影響 total 變量本身的類型和值。如果 total 的值變了,那么 total 的輸出結(jié)果將變?yōu)?400.000000;如果 total 的類型變了,那么 unit 的輸出結(jié)果將變?yōu)?80.000000。
擴(kuò)展知識:常用的算術(shù)轉(zhuǎn)換
常用的算術(shù)轉(zhuǎn)換是隱式地把值強(qiáng)制轉(zhuǎn)換為相同的類型。編譯器首先執(zhí)行整數(shù)提升,如果操作數(shù)類型不同,則它們會被轉(zhuǎn)換為下列層次中出現(xiàn)的最高層次的類型:
常用的算術(shù)轉(zhuǎn)換不適用于賦值運(yùn)算符、邏輯運(yùn)算符 && 和 ||。讓我們看看下面的實(shí)例來理解這個(gè)概念:
#include <stdio.h> int main(){ int i = 17; char c = "c"; /* ascii 值是 99 */ float sum; sum = i + c; printf("Value of sum : %f\n", sum ); }當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會產(chǎn)生下列結(jié)果:
Value of sum : 116.000000
在這里,c 首先被轉(zhuǎn)換為整數(shù),但是由于最后的值是 float 型的,所以會應(yīng)用常用的算術(shù)轉(zhuǎn)換,編譯器會把 i 和 c 轉(zhuǎn)換為浮點(diǎn)型,并把它們相加得到一個(gè)浮點(diǎn)數(shù)。
以上就是c語言如何進(jìn)行強(qiáng)制類型轉(zhuǎn)換的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
關(guān)鍵詞: