C ++中的整数除法11

时间:2011-12-23 14:10:09

标签: c++ c++11

我注意到对C ++ 11第5.6节的一些措辞更改。 (我正在查看C ++标准N3242草案,日期为2011-02-28。)新(草案)标准包括以下句子:

“对于积分操作数,/运算符产生代数商,丢弃任何小数部分;”

此声明不在03标准的5.6(ISO-IEC-14882-2003)中,但我不认为这是一个改变,是吗?这就是C和C ++多年来的工作方式,除非我已经失去理智(无论如何都可能发生)。

2 个答案:

答案 0 :(得分:9)

你不会生气。

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。

答案 1 :(得分:1)

几乎。在C ++ 03中,%的余数(其中两者都被指定)的符号未指定,因为在某些情况下舍入可能会偏离零。与C ++ 03脚注比较:

  

根据正在进行的ISO C修订工作,首选   整数除法的算法遵循ISO中定义的规则   Fortran标准,ISO / IEC 1539:1991,其中商始终存在   向零舍入。

然而,在实践中,这几乎没有任何区别。