我根据以下表达式理解Modulus运算符:
7 % 5
这将返回2,因为5进入7一次,然后给出剩下的2,但是当你将这个语句反转为:
5 % 7
这给了我5的值,让我有点困惑。虽然整个7没有进入5,但它的一部分确实如此,为什么没有剩余或剩余的正面或负面2?
如果基于7根本没有进入5的事实来计算5的值,为什么剩余部分不是7而不是5?
在我对模数运算符的理解中,我觉得我在这里缺少一些东西。
答案 0 :(得分:68)
(此解释仅适用于正数,因为它取决于语言)
<强>定义强>
模数是一个数字与另一个数字的欧氏分裂的剩余部分。 %
称为模运算。
例如,9
除以4
等于2
,但它仍为1
。在此处9 / 4 = 2
和9 % 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。
答案 1 :(得分:6)
正如其他人所指出的,模数是基于余数系统的。
我认为考虑模数的一种更简单的方法是将股息(要分割的数字)完全除以除数后剩下的。因此,如果我们考虑5%7,当你将5除以7时,7可以进入5只0次,当你从5减去0(7 * 0)时(就像我们在小学时学到的那样),那么其余的将是5(国防部)。见下图。
0
______
7) 5
__-0____
5
使用相同的逻辑,-5 mod 7将为-5(只有0 7可以进入-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
答案 2 :(得分:4)
模数是剩余系统。
所以7%5 = 2。
5%7 = 5
3%7 = 3
2%7 = 2
1%7 = 1
在函数内部使用时确定数组索引。这是安全的编程吗?这是一个不同的问题。我猜。
答案 3 :(得分:4)
这里有些答案让我难以理解。我将尝试再添加一个答案,以简化查看方式:
该过程基本上是问两个问题:
例如7%5
(1)乘以5以获得7的数字是多少? (从0开始)
让我们尝试一下:
0
,0 x 5 = 0
还是,我们很矮,所以我们加一(+1)。
1
,1 x 5 = 5
我们还没有得到7,所以我们加一(+1)。
2
,2 x 5 = 10
现在,我们已超过7
。因此,2
是不正确的,让我们回到第一步(使用1
的值),结果为5
。
(2)我们需要加多少才能得到7?
很明显,这个数字是5。7-5 = 2
。
7 % 5 = 2;
例如5%7
** 1-我们用来乘以7以获得5的数字是多少? **
让我们尝试一下:
0
,0 x 7 = 0
我们还没有得到5,让我们尝试更大的数字。
1
,1 x 7 = 7
哦,不,我们超过了5
,让我们回到上一步,我们使用0
并得到了结果0
。
2-为了达到左侧0
上的数字值,我们需要加多少到5
(我们从步骤1得到的数字)?
很明显,这个数字是5。5-0 = 5
5 % 7 = 5
答案 4 :(得分:2)
步骤1:5/7 = 0.71
步骤2:取小数的左侧,因此我们从0.71取0并乘以7 0 * 7 = 0;
步骤#:5-0 = 5;因此,5/7 = 5
答案 5 :(得分:1)
这只是剩下的人。让我告诉你如何
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
答案 6 :(得分:0)
模数运算符为您提供“减少残留系统”的结果。例如, mod 5 有5个整数:0,1,2,3,4。实际上 19 = 12 = 5 = -2 = -9(mod 7)。编程语言通过“减少残留系统”给出了答案的主要区别。
答案 7 :(得分:0)
下面给出了一种找出余数的新方法
陈述:余数总是不变的
ex : 26 divided by 7 gives R : 5
通过找到完全划分26的数字可以很容易地发现这更接近于 除数和两者的区别
13 is the next number after 7 that completely divides 26 because after 7 comes 8, 9 ,
10, 11, 12 where none of them divides 26 completely and give remainder 0.
So 13 is the closest number to 7 which divides to give Remainder 0.
now take the difference (13 ~ 7) = 5 which is the Remainder .
note : for this to work divisor should be reduced to its simplest form ex: if 14
is the divisor ..7 has to be chosen to find the closest number dividing the dividend.
答案 8 :(得分:0)
让我们这样说:
实际上模数运算符执行相同的除法,但它并不关心答案,例如,如果将7除以5,则要注意提醒
所以,让我带你讲一个简单的例子:
认为5是一个块,然后例如我们将在15中有3个块(没有剩下),但是当这个loginc来到这个数字时{1,3,5,7,9, 11,...},这里是模数出来的地方,所以采取我之前说过的逻辑并将其应用于7,所以答案是我们在7 = 7中有1个5的块。我手里拿着2个提醒!那是模数!!!
但你问的是5%7,对吧?
那么按照我所说的逻辑,我们在5个中有多少7个块?的 0 强>
因此模数返回0 ...
就是这样......
答案 9 :(得分:0)
可汗学院有一个很好的描述: https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic
答案 10 :(得分:0)
正如您所说,%符号用于获取模数(除法余数)。
在w3schools' JavaScript Arithmetic page中,我们可以在“剩余部分”中阅读我认为是很好的解释
在算术中,两个整数的除法产生一个商和一个 剩余。
在数学中,取模运算的结果是 算术除法的余数。
因此,在您的特定情况下,当您尝试将7个香蕉分成5个香蕉组时,您可以创建1组5个香蕉(商),然后剩下2个香蕉(余数)。
如果将5根香蕉分成7组,您将无能为力,因此又剩下5根香蕉(剩余)。