我不太清楚模数除法的工作原理。
我正在计算27 % 16并用11结束,所以我不明白为什么。

我似乎无法在其中找到解释网上的外行术语。
有人可以详细说明这里发生的事情吗?

#1 楼

模除法的结果是给定数字的整数除法的余数。

这意味着:

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


评论


请不要采取这种错误的方式,但是您的示例不会为绝对不知道模数除法是怎么回事的人清除任何东西。您省略了非常重要的步骤来解释其余部分的来源。 Marcin M.在下面的回答更好地说明了这一过程。请考虑在将来的答案中为我们中可能根本不了解概念的人提供更详细的信息。不过,感谢您成为社区的贡献者!像您这样的人可以帮助我,并继续在我的教育旅程中帮助我:)

– Soundfx4
2015年5月1日,下午1:36

尽管有维基百科,模数和余数不是一回事。有些语言有一种,另一种,两种都有,还有一些未定义。

–user207421
19年1月31日在3:23



#2 楼

大多数解释都错过了一个重要步骤,让我们使用另一个示例来弥补这一空白。

给出以下内容: :

Dividend: 16
Divisor: 6


让我们确定原因。
首先,执行整数除法,该运算与普通除法一样,除了任何小数部分(又称为余数):

16 % 6 = 4


,然后将上述除法(2)的结果与除数(6)相乘:

最后,从我们的红利(12)中减去上述乘积(16)的结果:

16 / 6 = 2


减法的结果,其余的4与上述模数的结果相同!

评论


您如何从16/6中得到2,而不是2,6666666667?您是否应该始终不理会0,...?为什么?

–吕克
16年6月29日在16:37

@Luc正如Leo和ytpillai所提到的,我们使用整数除法(其中除后的结果的小数部分将被丢弃)。在Python 3中:16 // 6 >>> 2和16/6 >>> 2.6666666666666665

–bryik
16年11月6日在20:30



#3 楼

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

模块化算术的一个常见用法是在12小时制时钟中使用,其中将一天分为两个12小时制。 br />
让我们说这是当前时间:15:00
,但您也可以说现在是下午3点。

这正是模的作用:

15 / 12 = 1, remainder 3


您可以在Wikipedia上更好地解释此示例:Wikipedia Modulo Article

#4 楼

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

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


27%16:-


27- {1 * 16}

答案= 11

注意:

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

例如:27/16 = 1.6875在上述公式中应被视为1。 0.6875被忽略。

计算机语言的编译器也以相同的方式(通过在小数点后截断)对待带小数部分的整数

评论


3%7呢?

– eaglei22
18年1月3日在14:30

这样就等于3?

– Eaglei22
18年1月3日在14:31

#5 楼

模运算符采用除法语句,并返回该计算中剩下的任何东西,可以说是“剩余”数据,例如13/5 =2。这意味着该计算中还有3个剩余或剩余。为什么?因为2 * 5 =10。因此13-10 =3。

模运算符为您完成所有计算,13%5 =3。

评论


我认为这个答案从概念上最好地说明了这一点。其他答案在数学上也解释了这也是必要的,但这可以更好地帮助我理解如何应用模运算符。

–JonnyB
15年3月19日在12:33

#6 楼

模数除法就是这样:除以两个数并仅返回余数

27/16 = 1,剩余11个,因此27%16 = 11

ditto 43/16 = 2,剩余11个,所以43%16 = 11也是

#7 楼

很简单:a % b定义为a除以b的余数。

更多示例请参见Wikipedia文章。

#8 楼

我想添加一件事:

当股息大于/大于除数时,很容易计算模数

股息= 5
除数= 3


5%3 = 2


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


但是如果除数小于被除数怎么办

/>股息= 3
除数= 5


3%5 = 3 ??


这是因为,因为5不能直接除以3,所以模将是被除数的

#9 楼

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

20 % 3 = 2 




20 / 3 = 6;不包括.6667 –忽略它
3 * 6 = 18

20 - 18 = 2,这是模的余数


评论


您能否将这个答案的格式更好一点?

–代码特立独行
14年4月8日在16:53

检查Code Jammer的答案。

–阿吉马尔·萨利姆
17年5月9日,下午3:51

#10 楼

小数点后的数字(0.xxx)短时更容易。然后,您要做的就是将该数字与除后的数字相乘。

例如:32 % 12 = 8

执行32/12=2.666666667
,然后将2扔掉,并专注于0.666666667
0.666666667*12=8 <-这就是您的答案。

(同样,仅当小数点后的数字短时才容易)

#11 楼

唯一需要了解的是模数(此处用%表示,类似于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


如前所述,只需记住不变式,即欧几里得除法。

进一步的细节:


整数除法的行为是什么?
计算机科学家的部门和模量


评论


在分页方面出奇地有用。

–鲍勃·乔丹
19年5月21日在8:37

#12 楼


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。

#13 楼

模数除法为您提供除法的余数,而不是商。

#14 楼

假设您有17个mod6。

总共6个将使您最接近17,它将是12个,因为如果您超过12个,您将有18个,这比17个问题多mod 6,然后从12中减去12,然后减去17,这将为您提供答案。在这种情况下,是5。

#15 楼

模数除法非常简单。它使用余数而不是商。

    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,结果始终为<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}


因此,模数及其用途变得更加清晰。

#16 楼

很简单,Modulus运算符(%)在整数除后返回余数。让我们以您的问题为例。 27%16 = 11如果将27除以16即(27/16),则余数为11,这就是为什么答案为11的原因。

#17 楼

写出一个以0开头的表。

{0,1,2,3,4}


继续以行的形式。

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


第1列是5的倍数。第2列中的所有内容都是5的
倍数,其余为1。现在是抽象部分:您可以将(1)写为1/5或十进制扩展名。模运算符仅返回
该列,或者换种方式,它返回长整除的余数。您正在处理modulo(5)。不同的模数,不同的表格。
哈希表的思考。

#18 楼

当我们将两个整数相除时,我们将得到一个如下方程式:

A / B 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是插入元素的插槽或键的数目。

请参阅如何哈希表可获取更多信息吗?

#19 楼

对于我来说,这是理解模运算符的最佳方法。我只是通过示例向您解释。

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