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程式設計時,很多函式使用了類似 以下的寫法,所以才確信自己的...