在Java中,我们有两种不同的模运算(余数运算),
目前我使用以下方法(出于性能原因,它甚至与
%
和Math.floorMod()
。它们的区别在于映射目标的范围,可以依赖于第一个操作数的符号或第二个操作数的符号。这个页面清楚地解释了两者的差异。
在C++中是否有相同效果且速度较快的操作等同于 Math.floorMod()
?目前我使用以下方法(出于性能原因,它甚至与
Math.floorMod()
不完全相等):inline int floor_mod(int x, int y) {
x %= y;
if (x < 0) {
x += y;
}
return x;
}
我认为在某些CPU上,可能会有一种内在的或类似的东西,它只编译成1条指令。
if (y < 0) ...
吗? - Bob__x
为-101
,y
为100
。x %= y
的结果与x = x % y
相同,因此x
将会是-101 % 100
,即等于-1
(在 C++ 中)。因此,您需要检查x
是否为负数,以便必要时取它的补码。 - user12927872