我通过以下表达式理解Modulus运算符:
7 % 5
这将返回2,这是因为5一次进入7,然后给出剩下的2,但是当您将以下语句反转为以下内容时,我会感到困惑:
5 % 7
这给了我5的值,这使我有些困惑。尽管7的总数没有变成5,所以为什么不存在余数或正数或负数2的余数呢?
如果它基于7根本不变成5的事实来计算5的值,那么为什么余数不是7而不是5?
我对模运算符的理解似乎缺少一些东西。
我通过以下表达式理解Modulus运算符:
7 % 5
这将返回2,这是因为5一次进入7,然后给出剩下的2,但是当您将以下语句反转为以下内容时,我会感到困惑:
5 % 7
这给了我5的值,这使我有些困惑。尽管7的总数没有变成5,所以为什么不存在余数或正数或负数2的余数呢?
如果它基于7根本不变成5的事实来计算5的值,那么为什么余数不是7而不是5?
我对模运算符的理解似乎缺少一些东西。
1 % 500
返回的结果让我感到困惑,1
但是如果您手动进行长除法,则1将完全变成500,而没有任何余数(但这将是一个十进制结果)。阅读答案后,我意识到它%
不会用小数位表示,因此对于1%500,它将返回整数作为余数。如果您考虑一下,那是对的。
Answers:
(此说明仅针对正数,因为否则取决于语言)
定义
该模是由另外一个号码的欧几里得除法的余数。%
称为模运算。
例如,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:
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 % 5
是2
;
范例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
希望能有所帮助。
正如其他人指出的那样,模量基于剩余系统。
我认为考虑模数的更简单方法是将除数(要除的数)除以除数后剩下的数。因此,如果我们考虑5%7,当您将5除以7时,7只能变成0到5,而当您从5中减去0(7 * 0)时(就像我们在小学学习的一样),那么其余的将是5(国防部)。请参见下图。
0
______
7) 5
__-0____
5
使用相同的逻辑,-5 mod 7将为-5(-5中只能输入0 7,而-5-0 * 7 = -5)。具有相同标记的-5 mod -7也将为-5。还有一些有趣的情况:
5 mod(-3)= 2,即5-(-3 * -1)
(-5)mod(-3)= -2,即-5-(-3 * 1)= -5 + 3
剩下的就差不多了。让我告诉你怎么做
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
下面给出了一种发现余数的新颖方法
声明:余数始终不变
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,这是篡改因子。
注意:为使此除数有效,应将除数简化为最简单的形式,例如:如果除数为14,则必须选择7以找到最接近除数的数字。
(13 ~ 7) = 5
意思 13和7之间的差是6,而不是5。“如果14是除数,则必须选择7”是什么意思?回答毫无意义,也不会得出正确的结果。
如您所说,%符号用于取模数(除法余数)。
在w3schools的JavaScript算术页面中,我们可以在“剩余部分”中阅读我认为是一个很好的解释
在算术中,将两个整数相除会得到商和 余数。
在数学中,取模运算的结果是算术除法的 其余部分。
因此,在您的特定情况下,当您尝试将7个香蕉分成5个香蕉组时,您可以创建1组5个(商),剩下2个香蕉(余数)。
如果将5根香蕉分成7组,您将无能为力,因此又剩下5根香蕉(剩余)。