例如,假设您有以下变量:
int i = 9;
int j = 7;
取决于实施的价值,(-i)/j
,可以是–1
or –2
。怎么可能得到这两个不同的结果呢?
令人惊讶的是,结果是 C89 中定义的实现:
ANSI 草案 http://flash-gordon.me.uk/ansi.c.txt § 3.3.5
当整数相除且相除不精确时,如果两者都
操作数为正数 / 运算符的结果最大
小于代数商和 % 的结果的整数
运算符为正。如果任一操作数为负,则是否
/ 运算符的结果是小于的最大整数
代数商或大于代数的最小整数
商是实现定义的
然而这在 C99 中被改变了
N1256 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
§6.5.5/6
当整数相除时,/运算符的结果是代数商丢弃任何小数部分*
带脚注:
* 这通常称为“向零截断”
澄清一下,“实现定义”意味着实现必须决定哪一个,这并不意味着有时你会得到一件事,有时你会得到另一件事(除非实现定义它做一些非常奇怪的事情,我猜)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)