模除是如何工作的

我不太明白模除法是怎么运作的。 我在计算 27 % 16,结果得到了 11,我不明白为什么。

我在网上找不到外行人的解释。 有人能解释一下到底发生了什么吗?

331832 次浏览

modulo 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

模除法很简单: 除两个数,只返回余数

27/16 = 1,还剩11,因此27% 16 = 11

43/16 = 2,还剩11,所以43% 16 = 11

Very simple: a % b is defined as the remainder of the division of a by b.

有关更多示例,请参见 维基百科文章

模除法给你除法的余数,而不是商。

也许带有时钟的例子可以帮助您理解模数。

同余关系的一个常见用法是在12小时的时钟中使用,这种时钟将一天分为两个12小时的周期。

让我们说我们目前这个时候: 15:00
但是你也可以说它是 < strong > 3 pm

这正是模块所做的:

15 / 12 = 1, remainder 3

你会发现这个例子在 wikipedia 上解释得更好: 维基百科模块文章

大多数解释都忽略了一个重要的步骤,让我们用另一个例子来填补这个空白。

鉴于以下情况:

Dividend: 16
Divisor: 6

模函数看起来像这样:

16 % 6 = 4

我们来看看为什么会这样。

首先,执行与正规除法相似的 整数除法,除了丢弃任何小数(即余数) :

16 / 6 = 2

然后,用我们的 divisor(6)算出上述分割(2)的结果:

2 * 6 = 12

最后,从我们的 股息(16)得到上述增殖(12)的结果:

16 - 12 = 4

这个减法的结果,4余额,和上面的 模数的结果是一样的!

模运算符接受一个除法语句,并返回该计算的剩余部分,也就是“剩余”数据,比如13/5 = 2。也就是说,还有3个剩余,或者说是计算出来的剩余。为什么?因为2 * 5 = 10。因此,13-10 = 3。

模运算符会为你做所有的计算,13% 5 = 3。

很简单,模运算符(%)返回整数除法后的余数。让我们以你的问题为例。怎么27% 16 = 11?当你简单地把27除以16,即(27/16) ,你得到的余数是11,这就是为什么你的答案是11。

计算模量的简单公式是:-

[Dividend-{(Dividend/Divisor)*Divisor}]

所以,27% 16:-

27-{(27/16) * 16}

27-{1 * 16}

答案 = 11

注意 :

所有的计算都使用整数。如果是小数商,小数后面的部分将被忽略/截断。

例如: 27/16 = 1.6875在上面提到的公式中只是1。0.6875被忽略了。

计算机语言的编译器处理带有小数部分的整数的方法也是一样的(通过在小数之后截断)

假设你有17个模块6。

what total of 6 will get you the closest to 17, it will be 12 because if you go over 12 you will have 18 which is more that the question of 17 mod 6. You will then take 12 and minus from 17 which will give you your answer, in this case 5.

17模6 = 5

当你的数字在小数点后(0。Xxx)是短的。然后你要做的就是把那个数和除法后的那个数相乘。

Ex: 32 % 12 = 8

你做 32/12=2.666666667 然后你扔掉 2,把注意力集中在 0.666666667上 这就是你的答案。

(同样,只有小数后面的数字短时才容易)

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

20 % 3 = 2
  1. 不要包括 .6667-忽略它
  2. 3 * 6 = 18
  3. 20 - 18 = 2,这是模的剩余部分

模除法很简单,它用余数代替商。

    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,因此13% 12 = 1。


把模量看作一个“循环”是有帮助的。

换句话说,对于表达式 n % 12,结果将是 一直都是 < 12。

这意味着 n % 12的集合 0..100的序列是:

{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}

In that light, the modulus, as well as its uses, becomes much clearer.

写出一个以0开头的表。

{0,1,2,3,4}

Continue the table in rows.

{0,1,2,3,4}
{5,6,7,8,9}
{10,11,12,13,14}

Everything in column one is a multiple of 5. Everything in column 2 is a 5的倍数,1作为余数。现在抽象的部分: 你可以写 (1)作为1/5或作为十进制展开式。模运算符只返回 列,或者换一种思维方式,它返回 long 的余数 除法。你在处理模(5)。不同的模,不同的表。 想象一个哈希表。

当我们除以两个整数时,我们会得到一个像下面这样的方程:

A/B = Q 余数 R

A 是红利; B 是除数; Q 是商,R 是余数

有时候,我们只对 A 除以 B 的余数感兴趣。 对于这些情况,有一个称为模运算符的运算符(缩写为 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.

有关更多信息,请参见 可汗学院文章

In Computer science, Hash table uses Mod operator to store the element where A will be the values after hashing, B will be the table size and R is the number of slots or key where element is inserted.

有关更多信息,请参见 散列表是如何工作的

这是我理解模运算符的最好方法,我将通过例子给你们解释。

16 % 3

When you division these two number, remainder is the result. This is the way how i do it.

16 % 3 = 3 + 3 = 6; 6 + 3 = 9; 9 + 3 = 12; 12 + 3 = 15

剩下的16等于1

16 % 3 = 1

这里还有一个例子: 16 % 7 = 7 + 7 = 14还剩下什么16? 是 2 16 % 7 = 2

还有一个: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24,所以余数为0,24 % 6 = 0

我还想补充一点:

当红利大于/大于除数时,计算模很容易

股息 = 5 除数 = 3

5% 3 = 2

3)5(1
3
-----
2

但如果除数小于股利呢

股息 = 3 除数 = 5

3 % 5 = 3 ?? how

这是因为,因为5不能直接除以3,所以模就是红利

唯一需要理解的是,modulus(在这里用% 表示,如 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

However for negative integers the situation is less clear and depends on the language and/or the standard. For instance -5/2 can return -2 (truncated toward zero as before) but can also returns -3 (with another language).

在第一种情况下:

-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

如前所述,只要记住 不变,这是 带余除法

更多详情:

27% 16 = 11

您可以这样解释:

16进27,然后通过。

16 * 2 = 32.

所以你可以说16在27中去了一次,剩下的是11。

In fact,

16 + 11 = 27

另一个例子:

20 % 3 = 2

在通过它之前,三号井要经过20次6次。

3 * 6 = 18

要把20加起来,我们需要2,因此模表达式的其余部分是2。