Ber*_*ard 9 c++ division c++11
请考虑以下代码(在C++ 11中):
int a = -11, b = 3;
int c = a / b;
// now c == -3
Run Code Online (Sandbox Code Playgroud)
C++ 11规范称负股息的除法向零舍入.
对于有一个运算符或函数来进行除向负无穷大的舍入非常有用(例如,为了在迭代范围时与正红利保持一致),那么标准库中是否有一个函数或运算符可以满足我的需要?或者也许是在现代编译器中执行它的编译器定义的函数/内在函数?
我可以编写自己的,例如以下(仅适用于正数除数):
int div_neg(int dividend, int divisor){
if(dividend >= 0) return dividend / divisor;
else return (dividend - divisor + 1) / divisor;
}
Run Code Online (Sandbox Code Playgroud)
但它不会像我的意图那样描述,也可能不是标准库函数或编译器内在优化(如果存在).
我不知道它的任何内在因素。我会简单地回顾性地对标准部门进行更正。
int div_floor(int a, int b)
{
int res = a / b;
int rem = a % b;
// Correct division result downwards if up-rounding happened,
// (for non-zero remainder of sign different than the divisor).
int corr = (rem != 0 && ((rem < 0) != (b < 0)));
return res - corr;
}
Run Code Online (Sandbox Code Playgroud)
请注意,它也适用于 C99 之前和 C++11 之前的版本,即没有向零舍入除法的标准化。