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)