prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 3.15

Q为什么代码

double degC, degF;
degC = 5 / 9 * (degF - 32);
总是给我 0?


A如果二元运算符的两个操作数都是整数,C 语言会执行整数运算,无论表达式的其余部分是什么类型。在本例中,整数运算是截断除法,得到 5 / 9 = 0。(但请注意,子表达式以意外类型计算的问题不仅限于除法,也不限于类型int。)如果你将其中一个操作数转换为floatdouble,或者使用浮点数常量,例如

	degC = (double)5 / 9 * (degF - 32);
or
	degC = 5.0 / 9 * (degF - 32);
,它就会按你预期的方式工作。请注意,转换必须应用于其中一个操作数;转换结果(如(double)(5 / 9) * (degF - 32))则无效。

另请参阅问题 3.14

参考资料:K&R1 第 1.2 节第 10 页,第 2.7 节第 41 页
K&R2 第 1.2 节第 10 页,第 2.7 节第 44 页
ISO 第 6.2.1.5 节
H&S 第 6.3.4 节第 176 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管