我真的不明白模数除法是如何工作的。我在计算27 % 16
和结束,11
我不明白为什么。
我似乎无法在网上找到通俗的解释。有人可以详细说明这里发生了什么吗?
我真的不明白模数除法是如何工作的。我在计算27 % 16
和结束,11
我不明白为什么。
我似乎无法在网上找到通俗的解释。有人可以详细说明这里发生了什么吗?
大多数解释都遗漏了一个重要步骤,让我们用另一个例子来填补空白。
鉴于以下情况:
Dividend: 16
Divisor: 6
模数函数如下所示:
16 % 6 = 4
让我们确定这是为什么。
首先,执行整数除法,这与普通除法类似,除了丢弃任何小数(也称为余数):
16 / 6 = 2
然后,将上述除法 ( ) 的结果与我们的除数( )相乘:2
6
2 * 6 = 12
最后,从我们的被除数( ) 中减去上述乘法 ( ) 的结果:12
16
16 - 12 = 4
这个减法的结果,4
余数,与我们上面的模数的结果相同!
计算模数的简单公式是:-
[Dividend-{(Dividend/Divisor)*Divisor}]
所以,27 % 16 :-
27- {(27/16)*16}
27-{1*16}
答案= 11
注意:
所有计算均使用整数。在小数商的情况下,小数点后的部分将被忽略/截断。
例如:27/16= 1.6875 在上述公式中仅取为 1。0.6875 被忽略。
计算机语言的编译器也以相同的方式处理带有小数部分的整数(通过截断小数点后)
也许带有时钟的示例可以帮助您理解模数。
模算术的常见用法是它在 12 小时制中的使用,其中一天分为两个 12 小时时段。
假设我们目前有这个时间: 15: 00
但你也可以说是下午 3 点
这正是模的作用:
15 / 12 = 1, remainder 3
你会发现这个例子在维基百科上得到了更好的解释:维基百科模数文章
模运算符采用除法语句并返回该计算剩下的任何内容,即“剩余”数据,可以说,例如 13 / 5 = 2。这意味着,还有 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
。
有关更多示例,请参阅维基百科文章。
我想再补充一件事:
当被除数大于/大于除数时,很容易计算模数
被除数 = 5 除数 = 3
5 % 3 = 2
3)5(1
3
-----
2
但是如果除数小于被除数怎么办
被除数 = 3 除数 = 5
3 % 5 = 3 ?? 如何
这是因为,因为 5 不能直接除以 3,所以取模就是被除数
我希望这些简单的步骤会有所帮助:
20 % 3 = 2
20 / 3 = 6
; 不包括.6667
- 忽略它3 * 6 = 18
20 - 18 = 2
,这是模的余数27 % 16 = 11
你可以这样解释:
16 在通过它之前进入 27 的 1 次。
16 * 2 = 32。
因此,您可以说 16 在 27 中出现一次,其余为 11。
实际上,
16 + 11 = 27
另一个例子:
20 % 3 = 2
Well 3 在通过之前进入 20 的 6 次。
3 * 6 = 18
加起来是 20,我们需要 2,所以模数表达式的余数是 2。
当小数点后的数字 (0.xxx) 很短时会更容易。然后你需要做的就是将该数字乘以除法后的数字。
前任:32 % 12 = 8
你做32/12=2.666666667
然后你扔掉2
,专注于0.666666667
0.666666667*12=8
<-- 这就是你的答案。
(同样,只有小数点后的数字很短时才容易)
唯一需要理解的是模数(这里用 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
如前所述,只需记住不变量,即欧几里得除法。
更多详细信息:
假设你有 17 mod 6。
总共 6 将使您最接近 17,它将是 12,因为如果您超过 12,您将有 18,这比 17 mod 6 的问题更多。然后,您将从 17 中减去 12,这将给您你的答案,在这种情况下是 5。
17 模 6=5
很简单,Modulus operator(%) 返回整数除法后的余数。让我们以你的问题为例。27% 16 = 11 怎么算?当您简单地将 27 除以 16 即 (27/16) 时,余数为 11,这就是您的答案为 11 的原因。
模除法为您提供除法的余数,而不是商。
模除法非常简单。它使用余数而不是商。
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。
这意味着集合的顺序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}
有鉴于此,模数及其用途变得更加清晰。
写出一个从 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 时的余数感兴趣。对于这些情况,有一个称为模运算符(缩写为 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.
有关更多信息,请参阅可汗学院文章。
在计算机科学中,哈希表使用 Mod 运算符来存储元素,其中 A 是散列后的值,B 是表的大小,R 是插入元素的槽数或键数。
有关详细信息,请参阅哈希表的工作原理
这是我理解模数运算符的最佳方法。我将通过示例向您解释。
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 = 0