模数除法如何运作

时间:2010-04-18 22:44:01

标签: language-agnostic math modulo division

我真的不明白模数除法是如何工作的。 我正在计算27 % 16,最后结束11,我不明白为什么。

我似乎无法在网上找到外行人的解释。 有人可以详细说明这里发生了什么吗?

18 个答案:

答案 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 % ba定义为b除以{{1}}的其余部分。

有关更多示例,请参阅wikipedia article

答案 7 :(得分:3)

我希望这些简单的步骤有所帮助:

20 % 3 = 2 
  1. 20 / 3 = 6;不要包含.6667 - 只需忽略它
  2. 3 * 6 = 18
  3. 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