2

我从 Java 到 Ruby,这个 -7 mod 3 = 2 让我很困惑

4

3 回答 3

8

因为 -7 减 2 是 3 的倍数。

更具体地说,在这种情况下使用的模数的实现恰好选择了正模数。一些实现选择与第一个操作数具有相同符号的模数,其他实现总是选择正数,等等。

于 2012-07-06T08:02:16.027 回答
1

{0, 1, 2}想象一个带有顺时针方向 元素的数字轮。

你从 0 开始,逆时针移动 7 个位置,因为你有-7(如果你有+5 mod 3,你会5顺时针移动位置)。

那么,让我们看看这会将我们带到哪里:

Current Number:  0 -1 -2 -3 -4 -5 -6 -7
Wheel Number:    0  2  1  0  2  1  0  2
于 2012-07-06T08:06:55.413 回答
1

mod 函数给出小于第一个参数的最大倍数以上的余数。

如果是 7 mod 3,那么 6 是小于 7 的最大倍数,所以 1 就是答案 (7-6)

因为它是 -7,那么 -9 是小于 -7 的最大倍数,所以 2 是答案(-7- -9 或 -7+9)

于 2012-07-06T08:07:08.050 回答