5

我可以确定 C++ 中的奇数在以有余数的方式进行除法时应该总是返回结果的下限,还是有任何例外?我是说:

int x = 5;
x = x/2;
cout<<x;      //2
4

3 回答 3

5

是的。你可以在 c++ 中确定这一点

ISO/IEC N3485(工作草案)在 5.6.4 中说

The binary / operator yields the quotient, and the binary % operator yields 
the remainder from the division of the first expression by the second.
   If the second  operand of / or % is zero the behavior is undefined. 
For integral operands the / operator yields the algebraic quotient with any 
fractional part discarded;81 if the quotient a/b is representable in the type 
of the result, (a/b)*b + a%b is equal to a; otherwise, the behavior of both 
a/b and a%b is undefined.
于 2013-04-18T16:39:03.503 回答
2

整数除法在 C/C++ 中作为地板运算处理。

你得到了上面的例子,因为无法表示2真正的答案。2.5

这里有一些更详细的答案

于 2013-04-18T16:29:34.967 回答
2

是的; 整数之间的除法在 C++中始终是整数除法:

[C++11 5.6/4]:二元/运算符产生商,二元%运算符产生第一个表达式除以第二个表达式的余数。如果/or的第二个操作数%为零,则行为未定义。对于整数操作数,/运算符产生代数商,其中任何小数部分被丢弃;如果商a/b在结果类型中是可表示的,(a/b)*b + a%b则等于a

于 2013-04-18T16:48:28.783 回答