我真的不明白模数除法是如何工作的。
我正在计算27 % 16
,最后结束11
,我不明白为什么。
我似乎无法在网上找到外行人的解释。 有人可以详细说明这里发生了什么吗?
答案 0 :(得分:134)
大多数解释都错过了一个重要的步骤,让我们用另一个例子填补空白。
鉴于以下内容:
Dividend: 16
Divisor: 6
模数函数如下所示:
16 % 6 = 4
让我们确定原因。
首先,执行 integer division ,这与普通除法相似,但任何小数(a.k.a。余数)都将被丢弃:
16 / 6 = 2
然后,将上述除法(2
)的结果乘以除数(6
)
2 * 6 = 12
最后,从我们的红利(12
)中减去上述乘法(16
)的结果:
16 - 12 = 4
此减法的结果4
,余数与我们模数的结果相同!
答案 1 :(得分:102)
modulo division的结果是给定数字integer division的剩余部分。
这意味着:
27 / 16 = 1, remainder 11
=> 27 mod 16 = 11
其他例子:
30 / 3 = 10, remainder 0
=> 30 mod 3 = 0
35 / 3 = 11, remainder 2
=> 35 mod 3 = 2
答案 2 :(得分:30)
也许带时钟的例子可以帮助你理解模数。
模拟算术的熟悉使用是在12小时制中使用,其中一天分为两个12小时。
让我们说现在这次: 15:00
但你也可以说它下午3点
这正是模数的作用:
15 / 12 = 1, remainder 3
您可以在维基百科上更好地解释此示例:Wikipedia Modulo Article
答案 3 :(得分:29)
计算模数的简单公式为: -
[Dividend-{(Dividend/Divisor)*Divisor}]
所以,27%16: -
27- {(27/16)* 16}
27- {1 * 16}
答案= 11
注意强>:
所有计算都是整数。如果是小数,则忽略/截断小数点后的部分。
例如:27/16 = 1.6875在上述公式中仅为1。忽略0.6875。
计算机语言编译器也会以相同的方式处理带小数部分的整数(通过截断十进制后)
答案 4 :(得分:15)
模数运算符采用除法语句并返回该计算剩余的任何内容,"剩余的"数据,可以这么说,例如13/5 = 2.这意味着剩下3个,或者从该计算中剩余。为什么?因为2 * 5 = 10.因此,13 - 10 = 3。
模数运算符为您完成所有计算,13%5 = 3.
答案 5 :(得分:7)
模数除法就是这样:除以两个数并仅返回余数
27/16 = 1,剩下11,因此27%16 = 11
同上43/16 = 2剩下11,所以43%16 = 11
答案 6 :(得分:6)
非常简单:a % b
被a
定义为b
除以{{1}}的其余部分。
有关更多示例,请参阅wikipedia article。
答案 7 :(得分:3)
我希望这些简单的步骤有所帮助:
20 % 3 = 2
20 / 3 = 6
;不要包含.6667
- 只需忽略它3 * 6 = 18
20 - 18 = 2
,这是模数的其余部分答案 8 :(得分:1)
假设你有17个mod 6.
总共6个会让你最接近17,它将是12,因为如果你超过12,你将有18个更多的是17 mod 6的问题。然后你将从17减去12和会给你答案,在这种情况下为5。
17 mod 6 = 5
答案 9 :(得分:1)
要理解的唯一重要的事情是,模量(此处用%表示,如C中所示)是通过欧几里得除法定义的。
对于任何两个(d, q)
整数,总是正确:
d = ( d / q ) * q + ( d % q )
您会看到d%q
的值取决于 d/q
的值。通常,对于正整数d/q
会被截短为零,例如5/2给出2,因此:
5 = (5/2)*2 + (5%2) => 5 = 2*2 + (5%2) => 5%2 = 1
但是对于负整数,情况不太清楚,取决于语言和/或标准。例如,-5 / 2可以返回-2(像以前一样被截断为零),但也可以返回-3(使用另一种语言)。
在第一种情况下:
-5 = (-5/2)*2 + (-5%2) => -5 = -2*2 + (-5%2) => -5%2 = -1
但在第二个中:
-5 = (-5/2)*2 + (-5%2) => -5 = -3*2 + (-5%2) => -5%2 = +1
如前所述,只需记住不变式,即欧几里得除法。
更多详细信息:
答案 10 :(得分:1)
模数除法非常简单。它使用余数而不是商。
1.0833... <-- Quotient
__
12|13
12
1 <-- Remainder
1.00 <-- Remainder can be used to find decimal values
.96
.040
.036
.0040 <-- remainder of 4 starts repeating here, so the quotient is 1.083333...
13/12 = 1R1,ergo 13%12 = 1。
将模数视为“循环”会有所帮助。
换句话说,对于表达式n % 12
,结果将始终为&lt; 12。
这意味着0..100
的集n % 12
的序列是:
{0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10,11,0,[...],4}
从这个角度来看,模量及其用途变得更加清晰。
答案 11 :(得分:1)
小数点后的数字(0.xxx)很短时更容易。然后,您需要做的就是将该数字乘以除法后的数字。
例如:32 % 12 = 8
你做32/12=2.666666667
然后你扔掉2
,并专注于0.666666667
0.666666667*12=8
&lt; - 这是你的答案。
(再次,只有当小数点后的数字很短时才很容易)
答案 12 :(得分:1)
模数除法为你提供除法的余数,而不是商。
答案 13 :(得分:0)
很简单,模数运算符(%)在整数除法后返回余数。我们以你的问题为例。 27%16 = 11怎么样?当你简单地将27除以16,即27/16时,你得到11为余数,这就是为什么你的答案是11。
答案 14 :(得分:0)
写出一个以0开头的表。
{0,1,2,3,4}
按行继续表格。
{0,1,2,3,4}
{5,6,7,8,9}
{10,11,12,13,14}
第一列中的所有内容都是5的倍数。第2列中的所有内容都是a 5的倍数,1为余数。现在抽象部分:你可以写 (1)为1/5或十进制扩展。模数运算符仅返回 在列中,或者以另一种思维方式,它返回余数 师。你正在以模数(5)进行交易。不同模数,不同表。 想想一个哈希表。
答案 15 :(得分:0)
当我们除以两个整数时,我们将得到一个如下所示的等式:
A / B = Q余数R
A是股息; B是除数; Q是商,R是余数
有时,我们只关注当我们将A除以B时剩余部分是什么。 对于这些情况,有一个名为modulo运算符的运算符(缩写为mod)。
实施例
16/5= 3 Remainder 1 i.e 16 Mod 5 is 1.
0/5= 0 Remainder 0 i.e 0 Mod 5 is 0.
-14/5= 3 Remainder 1 i.e. -14 Mod 5 is 1.
有关详细信息,请参阅Khan Academy Article。
在计算机科学中,哈希表使用Mod运算符来存储元素,其中A将是散列后的值,B将是表大小,R是插入元素的插槽或键的数量。
有关详细信息,请参阅How does a hash table works
答案 16 :(得分:0)
27%16 = 11
您可以这样解释:
16通过1次变为27。
16 * 2 = 32。
所以您可以说16在27中有一次,余数为11。
事实上
16 + 11 = 27
另一个示例:
20%3 = 2
第3次击中6次就进入20次。
3 * 6 = 18
要累加到20,我们需要2,所以模数表达式的余数是2。
答案 17 :(得分:-1)
这是我了解模数运算符的最佳方法。我将通过实例向您解释。
16 % 3
当你划分这两个数字时,余数就是结果。这就是我的方式。
16 % 3 = 3 + 3 = 6; 6 + 3 = 9; 9 + 3 = 12; 12 + 3 = 15
那么剩下的16是1
16 % 3 = 1
这是另外一个例子:16 % 7 = 7 + 7 = 14
剩下的是什么?是2
16 % 7 = 2
还有一个: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24
。因此,余数为零,24 % 6 = 0