c++ 11中的整数除法
Integer Division in C++11
我注意到c++ 11第5.6节的一些措辞变化。(我正在看c++标准草案N3242,日期为2011-02-28。)新的(草案)标准包括以下句子:
"对于整型操作数,/运算符产生任意小数部分被丢弃的代数商;"
这句话在03标准(ISO-IEC-14882-2003) 5.6中没有,但我不认为这是一个变化,不是吗?这就是C和c++多年来的工作方式,除非我失去了理智(无论如何都可能发生)。
你没疯。
5.6/4
的脚注说:
[C++03 footnote 74]:
根据正在进行的修订工作在ISO C中,整数除法的首选算法遵循在ISO Fortran标准中定义的规则,ISO/IEC 1539:1991,其中商总是向零四舍五入。
在c++ 11中,此行为是明确要求的,而不是"首选的";更改在兼容性部分列出:
[C++11: C.2.2]:
更改:指定整数/
和%
的结果舍入
原理:增加可移植性,C99兼容性。
对原始特性的影响:使用整数除法的有效c++ 2003代码将结果舍入到0或负无穷,而这个国际标准总是将结果舍入到0。
差不多了。在c++ 03中,%
的余数的符号是未指定的,因为在某些情况下,这种舍入也可能远离零。对比c++ 03脚注:
根据正在进行的ISO C修订工作,优先考虑整数除法的算法遵循ISO中定义的规则Fortran标准,ISO/IEC 1539:1991,其中商总是向零四舍五入
相关文章: