因爲朋友問到,因此整理了一份,若關於一些認識有錯誤還望指出......算法
● 若是一個運算符兩邊的運算數類型不一樣,先要將其轉換爲相同的類型,即較低類型轉換爲較高類型,而後再參加運算,轉換規則以下圖所示。spa
double ←── float 高code
↑ 對象
long blog
↑
unsigned 編譯
↑
int ←── char,short 低class
●簡單的說強制類型轉換有顯式轉換、隱式轉換變量
好比:float
//好比 //此時int型的變量a就被強制轉化爲了float型,b不變 //此時a=3.000000 (float默認保留小數點後六位) main() { int a; int b=3; a=(float)b; }
再好比:程序
//再好比 //一個初學C會遇到的一個攝氏度轉換的算法 // f爲輸入的溫度,c爲轉化後的溫度 main() { float c,f; scanf("%f",&f); c=5*(f-32)/9; } //根據優先級問題,先算括號裏面的,即f-32,因爲f是float型,則f-32也是float型 //5和9都是int型,5*(f-32)就是int型與float的乘積,此時的int會自動轉換爲float型 //同理,再除9,最終c爲float型。 /************************************************************** 可是也會有下面的問題 有些同窗會把 c=5*(f-32)/9的公式改寫成 c=5/9*(f-32); 即先用5/9再乘括號裏的東西,這樣的話輸出結果會直接爲0, 由於: 5 9均爲int型,int/int=int 因此5/9=0 0乘任何數都爲0 **************************************************************/
還有關於float、double輸入輸出時的類型轉換
//關於float double輸入輸出時的類型轉換 //好比: main() { float a; double b; scanf("%f",&a); printf("%f\n",a); scanf("%lf",&b); printf("%lf\n",b);//或者此行代碼可改成 printf("%f",b); } /***************************************************************** 爲何float型輸入輸出和double看似同樣又不同呢? %f你們都知道是float的輸入和輸出 那%lf呢?這裏是個必需要記住的地方, double型變量scanf裏面必須是"%lf" 你能夠把double理解爲long float 可是爲何double輸出能夠的%lf也能夠是%f呢 就是至關於把%lf按照%f的類型輸出了唄,通常狀況下double輸出用%f多些 *****************************************************************/
● 當較低類型的數據轉換爲較高類型時,通常只是形式上有所改變, 而不影響數據的實質內容, 而較高類型的數據轉換爲較低類型時則可能有些數據丟失。
如下爲整理獲得的一些 賦值中的類型轉換 :
當賦值運算符兩邊的運算對象類型不一樣時,將要發生類型轉換, 轉換的規則是:把賦值運算符右側表達式的類型轉換爲左側變量的類型。具體的轉換以下:
(1) 浮點型與整型
● 將浮點數(單雙精度)轉換爲整數時,將捨棄浮點數的小數部分, 只保留整數部分。 將整型值賦給浮點型變量,數值不變,只將形式改成浮點形式, 即小數點後帶若干個0。注意:賦值時的類型轉換其實是強制的。
(2) 單、雙精度浮點型
● 因爲c語言中的浮點值老是用雙精度表示的,因此float 型數據只是在尾部加0延長爲doub1e型數據參加運算,而後直接賦值。doub1e型數據轉換爲float型時,經過截尾數來實現,截斷前要進行四捨五入操做。
(3) char型與int型
● int型數值賦給char型變量時,只保留其最低8位,高位部分捨棄。
● chr型數值賦給int型變量時, 一些編譯程序無論其值大小都做正數處理,而另外一些編譯程序在轉換時,若char型數據值大於127,就做爲負數處理。對於使用者來說,若是原來char型數據取正值,轉換後仍爲正值;若是原來char型值可正可負,則轉換後也仍然保持原值, 只是數據的內部表示形式有所不一樣。
(4) int型與1ong型
● long型數據賦給int型變量時,將低16位值送給int型變量,而將高16 位截斷捨棄。(這裏假定int型佔兩個字節)。
將int型數據送給long型變量時,其外部值保持不變,而內部形式有所改變。
(5) 無符號整數 ● 將一個unsigned型數據賦給一個佔據一樣長度存儲單元的整型變量時(如:unsigned→int、unsigned long→long,unsigned short→short) ,原值照賦,內部的存儲方式不變,但外部值卻可能改變。 ● 將一個非unsigned整型數據賦給長度相同的unsigned型變量時, 內部存儲形式不變,但外部表示時老是無符號的。