83

我根据以下表达式理解模运算符:

7 % 5

这将返回 2,因为 5 进入 7 一次,然后给出剩下的 2,但是当您将这个语句反转为:

5 % 7

这给了我 5 的值,这让我有点困惑。虽然7的整体没有进入5,但它的一部分确实如此,为什么没有余数或正负2的余数?

如果它基于 7 根本不进入 5 的事实计算 5 的值,为什么余数不是 7 而不是 5?

在我对模数运算符的理解中,我觉得这里缺少一些东西。

4

10 回答 10

160

(此解释仅适用于正数,因为它取决于语言)

定义

模数是一个数除以另一个数的余数。%称为模运算

例如,9除以4等于2,但它仍然是1。在这里,9 / 4 = 29 % 4 = 1

欧几里得分部

在您的示例中:5 除以 7 得到 0,但仍为 5 ( 5 % 7 == 5)。

计算

可以使用以下等式计算模运算:

a % b = a - floor(a / b) * b
  • floor(a / b)表示您可以除以a的次数b
  • floor(a / b) * b是完全成功分享的金额
  • 总 ( a) 减去共享的内容等于除法的余数

应用于最后一个示例,这给出:

5 % 7 = 5 - floor(5 / 7) * 7 = 5

模数运算

也就是说,您的直觉是它可能是 -2 而不是 5。实际上,在模算术中,-2 = 5 (mod 7)因为它存在于 Z 中的 k 使得7k - 2 = 5.

您可能没有学过模算术,但您可能使用过角度,并且知道 -90° 与 270° 相同,因为它是模 360。它很相似,它换行了!所以画一个圆,说它的周长是 7。然后你读到哪里是 5。如果你尝试用 10,它应该是 3,因为10 % 7是 3。

于 2013-07-08T11:03:56.423 回答
23

两步解决方案。

这里的一些答案对我来说很复杂。我将尝试再添加一个答案,以简化如何看待这个问题的方式。


简短的回答:

示例 1:

7 % 5 = 2

每个人都应该得到一个披萨片。

将 7 片分成 5 个人,每个5人都会得到一个披萨片,我们最终会得到2切片(剩余的)。7 % 5等于是2因为7 大于 5


示例 2:

5 % 7 = 5

每个人应该得到一个披萨片

它给出了5因为5 小于 7。因此,根据定义,您不能将整个5项目划分7为人。因此,除法根本不会发生,您最终得到的金额与您开始时的金额相同5


程序化答案:

这个过程基本上是问两个问题:

示例 A:(7 % 5)

(Q.1) 乘以 5 得到 7 的数是多少?

Two Conditions: Multiplier starts from `0`. Output result should not exceed `7`. 

我们试试看:

乘数为零0,所以,0 x 5 = 0

尽管如此,我们还是很短,所以我们将乘数加一 (+1)。

1所以,1 x 5 = 5

我们还没有得到 7,所以我们加了一个(+1)。

2所以,2 x 5 = 10

现在我们超过了7。所以2不是正确的乘数。让我们返回一步(我们使用 的地方1)并记住结果是5。数字5是这里的关键。

(Q.2)我们需要在5(我们刚刚从步骤 1 中得到的数字)上加多少才能得到7

我们减去这两个数字:7-5 = 2

所以答案是: 7 % 52


示例 B:(5 % 7)

1- 我们用什么数乘以 7 得到 5?

Two Conditions: Multiplier starts from `0`. Output result and should not exceed `5`. 

我们试试看:

0所以,0 x 7 = 0

我们还没有得到 5,让我们尝试一个更高的数字。

1所以,1 x 7 = 7

哦不,我们超过5了,让我们回到上一步我们使用0并得到结果的地方0

2- 我们需要添加多少0(我们刚刚从步骤 1 中获得的数字)才能达到左侧数字的值5

很明显,这个数字是 5。5-0 = 5

   5 % 7 = 5

希望有帮助。

于 2018-09-06T10:15:04.627 回答
10

正如其他人指出的那样,模数是基于余数系统的。

我认为考虑模数的一种更简单的方法是在被除数(被除数)完全除以除数之后剩下的内容。所以如果我们考虑 5%7,当你将 5 除以 7 时,7 只能变成 0 次,当你从 5 中减去 0 (7*0) 时(就像我们在小学学到的那样),那么余数将是 5(mod)。请参见下图。

   0
  ______
7) 5    
__-0____
   5

使用相同的逻辑,-5 mod 7 将是 -5(只有 0 个 7s 可以进入 -5 和 -5-0*7 = -5)。同理,-5 mod -7 也将是 -5。还有几个有趣的案例:

5 mod (-3) = 2 即 5 - (-3*-1)

(-5) mod (-3) = -2 即 -5 - (-3*1) = -5+3

于 2017-07-11T18:15:51.020 回答
5

这只是关于剩余部分。让我告诉你怎么做

10 % 5=0
9 % 5=4 (because the remainder of 9 when divided by 5 is 4)
8 % 5=3
7 % 5=2
6 % 5=1

5 % 5=0 (because it is fully divisible by 5)

现在我们应该记住一件事,mod 表示余数,所以

4 % 5=4

但为什么是4?因为 5 X 0 = 0 所以 0 是小于 4 的最接近的倍数,因此 4-0=4

于 2018-03-22T05:34:19.867 回答
2

模数是余数系统。

所以 7% 5 = 2。

5 % 7 = 5

3 % 7 = 3

2 % 7 = 2

1 % 7 = 1

在函数内部使用时确定数组索引。编程安全吗?那是一个不同的问题。我猜。

于 2016-03-06T11:00:27.200 回答
2

第 1 步:5/7 = 0.71

第二步:取小数的左边,所以我们从0.71中取0乘以7 0*7 = 0;

步骤#:5-0 = 5;因此 , 5%7 =5

于 2016-12-24T08:22:59.900 回答
0

下面给出了一种找出余数的新方法

声明:余数总是不变的

ex : 26 divided by 7 gives R : 5 

这可以通过找到更接近除数的完全除以 26 的数并取两者的差来很容易地找到

13 是 7 之后完全除以 26 的下一个数字,因为在 7 之后是 8、9、10、11、12,其中没有一个完全除以 26,余数为 0。

所以 13 是最接近 7 的数,除以余数 0。

现在取差值 (13 ~ 7) = 5,即 tmainder。

注意:为此,除数应简化为最简单的形式,例如:如果 14 是除数,则必须选择 7 以找到最接近的除数除数。

于 2013-11-20T16:38:02.297 回答
0

模数运算符为您提供“减少残留系统”的结果。例如,对于mod 5,计算了 5 个整数:0,1,2,3,4。事实上19=12=5=-2=-9 (mod 7)。答案的主要区别是编程语言通过“减少残留系统”给出的。

于 2013-07-08T10:55:15.227 回答
0

让我们这样说吧:
实际上Modulus 运算符执行相同的除法,但它不关心答案,它确实关心提醒,例如,如果你将 7 划分为 5,
那么,让我带你看一个简单的例子:
想想 5是一个块,那么例如我们将在 15 中拥有 3 个块(WITH Nothing Left),但是当该 loginc 出现这种数字 {1,3,5,7,9,11,...} 时,这里是模数出现的地方,所以采用我之前所说的逻辑并将其应用于 7 ,所以答案将是我们在 7 中有 1 个 5 块 => 手上有 2 个提醒!那是模数!!!
但你问的是 5% 7 ,对吧?
所以按照我说的逻辑,我们有多少个 7 块 5 ???? 0
所以模数返回0...
就是这样...

于 2018-03-07T14:34:47.247 回答
0

正如您所说, % 符号用于取模(除法余数)。

w3schools 的 JavaScript 算术页面中,我们可以在剩余部分阅读我认为很好的解释

在算术中,两个整数相除产生一个和一个 余数

在数学中,模运算的结果是算术除法的 余数。

因此,在您的特定情况下,当您尝试将 7 根香蕉分成一组 5 根香蕉时,您可以创建 1 组 5 根(商),然后剩下 2 根香蕉(余数)。

如果将 5 根香蕉分成 7 根一组,您将无法这样做,因此您再次剩下 5 根香蕉(剩余部分)。

于 2020-06-01T10:19:28.820 回答