【发布时间】:2017-01-11 07:04:41
【问题描述】:
考虑以下代码(在 C++11 中):
int a = -11, b = 3;
int c = a / b;
// now c == -3
C++11 规范规定,除以负除数时,会向零舍入。
如果有一个运算符或函数来进行除法并舍入到负无穷大(例如,为了在迭代范围时与正除数保持一致),那么在标准库中是否有一个函数或运算符来做什么?我想要?或者也许是在现代编译器中执行它的编译器定义的函数/内在函数?
我可以自己写,例如以下(仅适用于正除数):
int div_neg(int dividend, int divisor){
if(dividend >= 0) return dividend / divisor;
else return (dividend - divisor + 1) / divisor;
}
但它不会像我的意图那样描述,并且可能不像标准库函数或编译器内在函数(如果存在)那样优化。
【问题讨论】:
-
我无法证明这一点。 Code
-
这是问题中的一个简单错误。
-11 / 3 == -3,-11 % 3 == -2。问题要求以使-11 / 3 == -4(和-11 % 3将是1)的方式进行划分 -
是的,一开始我犯了一个错误。我刚改了。谢谢!
-
“C++11 规范说,除以负除法四舍五入为零。” 正除法以不同的方式表现?可能我没有得到问题
-
@BiagioFesta 从 C++11 开始,对于正值和负值,除法总是向零舍入。在 C++11 之前,除法允许舍入到负无穷大,这相当于将正值舍入为零,但对于负值则不然。