c++ 11中的整数除法

Integer Division in C++11

本文关键字:整数 除法 c++      更新时间:2023-10-16

我注意到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,其中商总是向零四舍五入