本節書摘來自華章計算機《編寫高品質代碼:改善c程式代碼的125個建議》一書中的第1章,建議3-6,作者:馬 偉 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
在讨論這個話題之前,我們先看一個示例程式,如代碼清單1-22所示。
在代碼清單1-22中,我們定義了一個int類型的變量i1,并将i1除以9的值分别賦給了float類型的變量f1、f2、f3與f4。從表面上來看,最後f1、f2、f3與f4的結果應該完全相同。
但實際情況并非如此,當程式執行語句“float f1=(float)(i1/9)”時,它會先執行表達式“i1/9”,然後将表達式“i1/9”的執行結果35轉換成浮點類型再賦給f1,這樣就嚴重地導緻資料丢失。執行“float f1=(float)(i1/9)”語句在vc++ 2010中産生的彙編代碼如下所示:
但當我們将計算表達中的一個整數轉換為浮點類型時,如執行語句“float f2=i1/9.0f”時,它将先執行資料轉換操作,即先将變量i1轉換為浮點類型,然後再執行除法計算。執行“float f2=i1/9.0f”語句在vc++ 2010中産生的彙編代碼如下所示:
代碼清單1-22的運作結果如圖1-36所示。

是以,為了避免出現這種資訊丢失的情況,我們在使用整數運算計算一個值并把它賦給浮點變量時,必須将表達式中的一個或全部整數轉換為浮點數。