C語言中的數(shù)據類型強制轉換
C語言數(shù)據類型強制轉換
強制類型轉換:是通過類型轉換運算來實現(xiàn)的,主要的數(shù)據類型轉換分為自動轉換和強制轉換。
需要注意,不管哪種轉換,都是暫時改變表達式的值, 都只是為了本次運算的需要而對變量的數(shù)據長度進行的臨時性轉換,而不改變數(shù)據說明時對該變量定義的類型。
其一般形式為:(類型說明符)(表達式)
其功能是把表達式的運算結果強制轉換成(類型說明符)所表示的類型
自動轉換
是在源類型和目標類型兼容,以及目標類型廣于源類型時發(fā)生一個類型到另一類的轉換
例如: (float) a 把a轉換為浮點型,(int)(x+y) 把x+y的結果轉換為整型。
但需要注意的是關于float類型運算,下面這個float類型的運算代碼,輸出結果是3.400000
#include <stdio.h>int main() { int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean );}
強制類型轉換運算符的優(yōu)先級大于除法,因此 sum 的值首先被轉換為 double 型,然后除以 count,得到一個類型為 double 的值。
在C語言中,如果進行兩個整數(shù)的除法運算,結果會自動舍去小數(shù)部分,例如5/2=2,不是2.5。
所以你想進行浮點型的除法運算,必須保證至少一個操作數(shù)是浮點數(shù)。
對于float類型的強制轉化運算,與int類型的強制轉換運算中
兩個int類型強制轉換運算要寫成(int)(x+y) 把x+y的結果轉換為整型,其中(x+y)加括號的原因是,x與y是非int型,如果有小數(shù)的運算,可能會發(fā)生進1,導致最終轉變的整型數(shù)+1,例如:
float x=2.6; float y=3.7; (int)(x+y)=6; (int)x+y=5;
所以對于強制轉變成int類型要對x,y加括號,先進行括號里面的運算,在轉變成int型。
對于兩個float類型的強制轉換運算,必須保證兩個操作數(shù)中至少有一個數(shù)是float類型。
如:
int x=3; int y=2;(float)x/y=1.500000; //先把x變成float類型,在與int類型的y進行除法運算,結果是float類型計算完整結果的1.5 (float)(x/y)=1.000000; //先把兩個int類型的x與y進行計算,結果是1,在轉變成float類型1.0,可知計算不完整。 (float)x/(float)y=1.500000; //先把int類型的x轉換成float類型,再把int類型的y轉換成float類型,結果是float類型的1.5,計算結果完整。
類型轉換可以是隱式的,由編譯器自動執(zhí)行,也可以是顯式的,通過使用強制類型轉換運算符來指定。在編程時,有需要類型轉換的時候都用上強制類型轉換運算符,是一種良好的編程習慣。
如果一個運算符兩邊的運算數(shù)類型不同,先要將其轉換為相同的類型,即較低類型轉換為較高類型,然后再參加運算,轉換規(guī)則如下所示。
double ←── float 高
↑
long
↑
unsigned
↑
int ←── char,short 低
圖中橫向箭頭表示必須的轉換,如兩個float型數(shù)參加運算,雖然它們類型相同,但仍要先轉成double型再進行運算,結果亦為double型。
縱向箭頭表示當運算符兩邊的運算數(shù)為不同類型時的轉換,如一個long 型數(shù)據與一個int型數(shù)據一起運算,需要先將int型數(shù)據轉換為long型, 然后兩者再進行運算,結果為long型。
所有這些轉換都是由系統(tǒng)自動進行的叫自動轉換, 使用時你只需從中了解結果的類型即可。這些轉換可以說是自動的,當然,C語言也提供了以顯式的形式強制轉換類型的機制。
當較低類型的數(shù)據轉換為較高類型時,一般只是形式上有所改變, 而不影響數(shù)據的實質內容, 而較高類型的數(shù)據轉換為較低類型時則可能有些數(shù)據丟失。
強制轉換類型
說明符和表達式都必須加括號(單個變量可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉換成int型之后再與y相加了。
無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變量的數(shù)據長度進行的臨時性轉換,而不改變數(shù)據說明時對該變量定義的類型。
例1:
main() { float f=5.75; printf("f=%d,f=%f\n",(int)f,f); } f=5,f=5.750000
將float f強制轉換成int f ,5.75->5
float f=5.75; printf("(int)f=%d,f=%f\n",(int)f,f);
本例表明,f雖強制轉為int型,但只在運算中起作用, 是臨時的,而f本身的類型并不改變。因此,(int)f的值為 5(刪去了小數(shù)),而f的值仍為5.75。
數(shù)據類型主要有以下幾種方式
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C語言深入探究水仙花數(shù)與變種水仙花數(shù)代碼
求水仙花數(shù)和變種水仙花數(shù)是非常適合初學者學習的代碼,其中包含的循環(huán)和邏輯方式等知識點。這既能起到對以往知識的復習,也可以學習到一種不同的邏輯思考方式2022-05-05