C語言的浮點型別及資料的相互轉化

2021-09-12 14:31:40 字數 1053 閱讀 9370

c語言中有float 和double 兩種不同的 浮點型別,分別對應 ieee(電氣電子工程師學會)754單精度格式和雙精度格式,相應的十進位制有效數字分別為 7 位和 17位左右。

各種資料相互轉化時,滿足:

1、當int轉化為 float 時不會發生溢位,但有效數字可能被捨去(int 的32位都用來表示數,但是float 只用了24位來表示尾數);

2、int 或float 轉化為 double 時,因為double 的有效位數更多,故能保留到精確值。

3、從double 轉化為 float 時因為 float的 範圍更小,故可能發生溢位,此外,由於有效位數變少,更可能被捨入;

4、從float或double 轉化為 int 因為 int 沒有小數部分,所以資料可能會向 0 的方向被截斷。

int i , float f ,double d;

i==(int)(float)i; false;

f==(float)(int)f; false;

i==(int)(double) i; true;

f==(float)(double)f; true;

d==(float)d ;true;

f== -(- f); true;

(d+f)- d==f ; false;

值得分析的是最後乙個,例如當 d=1.79* 10的308次方, f=1.0 時,因為d+f 時需要d 和 f 的階數相同,因此需要對 f 的尾數進行向右移位,但可憐的float 尾數字只有24位,強大的double卻有53 位,再怎麼移位也不可能使其擁有相同的階數,最後float被捨去而變為0,因此 左右不相同,故為false。

C 資料型別及限制和相互轉換

c 資料型別包括有符無符整型 short,int,long,long long,int64 浮點型 float,double,long double 字元型 char,wchar t,char16 t,char32 t 相關限制資訊儲存在和中。除了傳統的初始化方式外,c 還有int a 23 或in...

C 各資料型別的相互轉換 總結一

一 其他資料型別轉化為字串 char temp 200 1 短整型 int i itoa i,temp,10 將i轉化為字串放入temp中,最後乙個數字表示十進位制 itoa i,temp,2 將i轉化為字串放入temp中,最後乙個數字表示二進位制 2 長整形 long l ltoa l,temp,...

C 不同型別指標的相互轉化

寫c已經有一段時間了,今天聽到有人說c的不同指標型別不能相互轉化!我不相信,但畢竟對方資歷比我深,慎重起見,只是笑過。但一直想著這個問題,於是剛才寫了乙個簡單的demo,測試了c指標的效能!年輕就是要敢於質疑!我還記得之前看過windows程式設計時,很多函式使用了類似 以下的寫法,所以才確信自己的...