2012-07-06 141 views
2

我从Java来Ruby和这个-7模3 = 2个我​​的谜题为什么在Ruby中-7 mod 3 = 2?

+2

为什么它会让你困惑?这是真的。 -7 mod 3 = 2 mod 3 = -1 mod 3等。然而,一个特定的表示必须被选择,而Ruby似乎选择了非负的(与java似乎选择与第一个符号相同的符号操作数)。 – 2012-07-06 08:00:59

+5

@alexandre为什么这么没有礼貌的OP。显然他不知道这个事实,所以他问道。 – reporter 2012-07-06 08:04:18

+1

@AlexandreC。那么,Java告诉我-1。 -7/3 = -2和-1余数。 -2 * 3 = -6 - 1 = -7 – noircc 2012-07-06 08:32:22

回答

8

由于-7减去2是3

倍数更具体地,在这种情况下使用的模量发生的执行选择正模量。一些实现选择与第一个操作数具有相同符号的模数,另一些实现选择正数等。

+1

您可以在Ruby中使用'remaining()'来获得与Java中相同的结果。请参阅http://en.wikipedia.org/wiki/Modulo_operation获取以不同语言列出实施选项的表格。 – 2012-07-06 08:11:33

+0

thx我对模数的理解是-7/3 = -2和-1余数。 => -2 * 3 = -6 + -1 = -7 – noircc 2012-07-06 08:29:34

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 
1

MOD函数给出了上面的最大倍数小于第一个参数剩余。

如果它是7 MOD 3,则图6是小于7的最大倍数,所以1是答案(7-6)

由于它是-7,-9然后比最大mulitiple少-7,所以2是答案(-7- -9或-7 + 9)