4.11 為什麼如下的代碼  int a = 100, b = 100; long int c = a * b; 不能工作?

根據 C 的內部類型轉換規則, 乘法是用 int 進行的, 而其結果可能在轉 換為 long 型並賦給左邊的 c 之前溢出或被截短。可以使用明確的類型 轉換, 強迫乘法以 long 型進行:
    long int c = (long int)a * b;
注意, (long int)(a * b) 不能達到需要的效果。

當兩個整數做除法而結果賦與一個浮點變量時, 也有可能有同樣類型的問題, 解決方法也是類似的。

參考資料: [K&R1, Sec. 2.7 p. 41]; [K&R2, Sec. 2.7 p. 44]; [ISO, Sec. 6.2.1.5]; [H&S, 使用我的編輯器,下面的代碼]; [CT&P, Sec. 3.9 pp. 49-50]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)