原標題:C語言—類型之間的轉換
當混合不同類型的數據進行計算時,便會發生類型轉換。
當不同類型的數據進行計算時,應首先將操作數轉換成相同的數據類型,然后再進行計算。
類型轉換有兩種形式,即隱式類型轉換和顯示類型轉換。
隱式類型轉換
所謂隱式類型轉換就是在編譯時由編譯器程序按照一定規則自動完成,而不需要人為的干預。因此,在表達式中如果有不同類型的數據參與同一運算時,編譯器就在編譯時自動按照規定的規則將其轉換為相同的數據類型。
C語言規定的轉換規則是由低級向高級轉換。例如,如果一個運算符帶有兩個類型不同的操作數時,那么在操作之前先將較低的類型轉換為較高的類型,然后進行運算,運算結果是較高的類型。更確切地說,對于每一個算術運算符,都遵循如圖所示的規則。
當整型數據和雙精度數據進行運算時,先將整型數據轉換成雙精度型數據,再進行運算,結果為雙精度類型數據。
當字符型數據和實型數據進行運算時,C先將字符型數據轉換成實型數據,然后進行計算,結果為實型數據。
注意:在賦值語句中,如果賦值號左右兩端的類型不同,則將賦值號右邊的值轉換為賦值號左邊的類型,其結果類型還是左邊類型。
也可以將圖3-3所示的規則用圖3-4表示。圖3-4中的水平箭頭表示必定轉換,縱向箭頭表示兩個操作對象類型不同時的轉換方向。
下面舉例說明類型轉換的規則。例如執行:
float x;
x = 100 + 3.1415926
會按如下步驟進行處理:首先將整型100轉換為double型,然后進行運算,其結果為double型。最后將表達式的結果轉換為float并賦給x。
顯式類型轉換
顯示類型轉換又叫強制類型轉換,它不是按照前面所述的轉換規則進行轉換,而是直接將某數據轉換成指定的類型。這以在很多情況下簡化轉換。例如,
int i;
i = i + 9.801;
按照隱式類型轉換處理方式,在處理i=i+9.801時,首先整型i轉換為double型,然后進行相加,結果為double型,再將double型轉換為整型賦給i。
int i;
i = i + (int)9.801;
這時直接將9.801轉換成整型,然后與i相加,再把結果賦給i。這樣可把二次轉換簡化為一次轉換。
顯示類型轉換的方法是在被轉換對象(或表達式)前加類型標識符,,類型標識符用小括號括起來,其格式是:
(類型標識符)表達式
例如,有如下程序片段:
int main()
{
int a = 1;
int b = 0;
float c = 1.8f;
b = a + (int)c;
printf("b=%d\n",b);
return 0;
}
在上述程序的運行過程中,在執行語句b=a+int(c)時,將c的值臨時強制性轉化為int型,但變量c在系統中仍為實型變量,也就是說,強制類型轉換不會改變變量的原值,這一點很重要,不少初學者忽略了這個問題。
責任編輯: