模量分解如何工作?
我真的不明白模数师是如何工作的。 我计算了27 % 16
,结果是11
,我不明白为什么。
我似乎无法在网上找到外行的解释。 有人可以详细说明这是怎么回事?
模分割的结果是给定数字的整数除法的其余部分。
这意味着:
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
大多数解释都没有考虑到一个重要的步骤,让我们用另一个例子填补空白。
鉴于以下情况:
Dividend: 16 Divisor: 6
模数函数如下所示:
16 % 6 = 4
让我们来确定这是为什么。
首先,进行整数除法 (类似于正常的除法,但是丢弃任何小数(aka余数)):
16 \ 6 = 2
然后把上述( 2
)的结果和我们的除数 ( 6
) 相乘 :
2 * 6 = 12
最后,从我们的分红 ( 16
)中减去上述乘法( 12
)的结果:
16 - 12 = 4
这个减法的结果, 4
, 其余的 ,是我们的模数上面的结果!
也许时钟的例子可以帮助你理解模。
模块化算法的熟悉使用是在12小时的时钟中使用,其中一天分为两个12小时的时间段。
假设我们目前有这个时间: 15 : 00
但是你也可以说是下午3点
这正是模数所做的事情:
15 / 12 = 1, remainder 3
你可以在wikipedia上找到更好的解释这个例子: Wikipedia Modulo Article
计算模量的简单公式是:
[Dividend-{(Dividend/Divisor)*Divisor}]
所以,27%16: –
27- {(27/16)* 16}
27- {1 * 16}
答案= 11
注意 :
所有的计算都是整数。 在小数商数的情况下,小数后的部分被忽略/截断。
例如:27/16 = 1.6875在上面提到的公式中只取1。 0.6875被忽略。
计算机语言的编译器也用相同的方法处理带有小数部分的整数(通过截断小数点后的部分)
模数运算符采用除法声明,并返回剩余的数据,比如13/5 = 2。这就意味着剩余3个数据,或者剩下3个数据。 为什么? 因为2 * 5 = 10。因此,13 – 10 = 3。
模数运算符为你做了所有的计算,13%5 = 3。
模数除法就是这样:将两个数除以仅返回余数
27/16 = 1,剩下11个,因此27%16 = 11
43/16 = 2,剩下11个,所以43%16 = 11
非常简单: a % b
被定义为a
除以b
的余数。
有关更多示例,请参阅维基百科文章 。
我希望这些简单的步骤将有助于:
20 % 3 = 2
-
20 / 3 = 6
; 不包括.6667
– 只要忽略它 -
3 * 6 = 18
-
20 - 18 = 2
,这是模的其余部分
模分给你一个除法的余数,而不是商。
比方说你有17模6。
总共有6个会让你最接近17个,这将是12个,因为如果你超过12个,你将会有18个,这更多的是17个模子6的问题。然后你将从12个减去17个,这会给你你的答案,在这种情况下5。
17 mod 6 = 5
模量的划分非常简单。 它使用余数而不是商。
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}
就此而言,模量及其用途变得更加清晰。
当您的小数点后的数字(0.xxx)较短时更容易。 那么你所要做的就是把这个数字与分割后的数字相乘。
例如: 32 % 12 = 8
你做32/12=2.666666667
然后你把2
扔掉,重点0.666666667
0.666666667*12=8
< – 这是你的答案。
(再次,只有在小数点以后的数字很短时才容易)
很简单,Modulus运算符(%)在整数除法之后返回余数。 我们来看一下你的问题。 如何27%16 = 11? 当你简单地把27除以16(27/16),那么你得到的余数为11,这就是为什么你的答案是11。
写出一个从0开始的表格。
{0,1,2,3,4}
继续行中的表。
{0,1,2,3,4} {5,6,7,8,9} {10,11,12,13,14}
第一列中的所有内容都是5的倍数。第二列中的所有内容都是5的倍数,其余为1。 现在抽象部分:你可以把(1)写成1/5或作为十进制扩展。 模运算符仅返回列,或者以另一种思维方式返回长分区的余数。 你正在处理模(5)。 不同的模数,不同的表格。 想想一个哈希表。
当我们划分两个整数时,我们将有一个等式如下:
A / B = Q余数R
A是分红; B是除数; Q是商,R是余数
有时候,我们只关心剩下的是什么,当我们将A除以B.对于这些情况,有一个称为模运算符(modulo operator)的运算符(缩写为mod)。
例子
16/5= 3 Remainder 1 ie 16 Mod 5 is 1. 0/5= 0 Remainder 0 ie 0 Mod 5 is 0. -14/5= 3 Remainder 1 ie -14 Mod 5 is 1.
请参阅可汗学院文章了解更多信息。
在计算机科学中,哈希表使用Mod运算符来存储元素,其中A将是哈希后的值,B将是表大小,R是元素插入处的插槽或键的数量。
请参阅哈希表如何工作的更多信息
我想补充一点:
股息大于除数时,计算模数很容易
红利= 5除数= 3
5%3 = 2
3)5(1 3 ----- 2
但如果除数比分红小
红利= 3除数= 5
3%5 = 3? 怎么样
这是因为,由于5直接不能3分,所以模分红就是分红
这是理解模数运算符的最好方法。 我会通过例子向你解释。
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
什么是16? 是2
16 % 7 = 2
还有一个: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24
24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24
24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24
。 所以余数是零, 24 % 6 = 0