我不太明白模除是如何工作的。
我在计算 27 % 16
的时候得到了 11
,但我不理解其中的原因。
我在网上找不到通俗易懂的解释。 能否有人简要解释一下这里发生了什么?
我不太明白模除是如何工作的。
我在计算 27 % 16
的时候得到了 11
,但我不理解其中的原因。
我在网上找不到通俗易懂的解释。 能否有人简要解释一下这里发生了什么?
如果小数点后的数字很短(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,因此:
d%q = d - (d/q)*q
是一个在数学和编程中广泛使用的公式,用于计算模运算。
最初的回答:
5 = (5/2)*2 + (5%2) => 5 = 2*2 + (5%2) => 5%2 = 1
-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
取模运算非常简单。它使用余数而不是商。
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}
模数除法给出的是除法的余数,而不是商。
很简单,模运算符(%)返回整数除法后的余数。让我们以您的问题为例。如何计算27%16 = 11?当您将27除以16即(27/16)时,您得到的余数是11,这就是为什么您的答案是11。
假设你有17 mod 6。
那么,哪个6的总数最接近17呢?答案是12,因为如果你超过12,那么你将得到18,这比17 mod 6 的问题更多。然后,你将从17中减去12,得到答案,即5。
17 mod 6 = 5
写出一个以0开始的表格。
{0,1,2,3,4}
在行中继续填写表格。
{0,1,2,3,4}
{5,6,7,8,9}
{10,11,12,13,14}
当我们将两个整数相除时,我们会得到以下形式的方程:
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的余数是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