【问题标题】:How Does Modulus Divison Work模数除法如何工作
【发布时间】:2011-02-09 11:52:23
【问题描述】:

我真的不明白模除法是如何工作的。 我在计算27 % 16,最后得到11,我不明白为什么。

我似乎无法在网上找到通俗易懂的解释。 有人可以详细说明这里发生了什么吗?

【问题讨论】:

    标签: language-agnostic math modulo division


    【解决方案1】:

    modulo division 的结果是给定数字的integer 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
    

    【讨论】:

    • 请不要以错误的方式理解这一点,但是对于那些完全不知道模块化除法发生了什么的人来说,您的示例并不能解决任何问题。您遗漏了非常重要的步骤来解释剩余部分的来源。 Marcin M. 在下面的回答更好地解释了这个过程。对于我们这些可能根本不了解某个概念的人,请考虑在未来的答案中提供更详细的答案。不过,感谢您成为社区的贡献者!像你这样的人帮助我,并在我的教育之旅中继续帮助我:)
    • 尽管有维基百科,但模数和余数不是一回事。有些语言有一个,有些是另一个,有些两者都有,还有一些未定义。
    【解决方案2】:

    模除就是这样:将两个数相除,只返回余数

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

    同上 43 / 16 = 2 剩下 11 所以 43 % 16 = 11 也是

    【讨论】:

      【解决方案3】:

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

      有关更多示例,请参阅wikipedia article

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          模算术的一个常见用途是它在 12 小时制中的使用,其中一天分为两个 12 小时时段。

          假设我们目前有这个时间:15:00
          但你也可以说是 下午 3 点

          这正是模的作用:

          15 / 12 = 1, remainder 3
          

          你会发现这个例子在 wikipedia 上有更好的解释:Wikipedia Modulo Article

          【讨论】:

            【解决方案6】:

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

            鉴于以下情况:

            Dividend: 16
            Divisor: 6
            

            模函数如下所示:

            16 % 6 = 4
            

            让我们确定这是为什么。

            首先,执行integer division,这与普通除法类似,只是丢弃了任何小数(也称为余数):

            16 / 6 = 2
            

            然后,将上述除数 (2) 与我们的 除数 (6) 相乘:

            2 * 6 = 12
            

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

            16 - 12 = 4
            

            这个减法的结果,4余数,与我们上面的模数的结果相同!

            【讨论】:

            • 如何在 16 / 6 中得到 2 而不是 2,6666666667?您是否应该始终忽略 0,...?为什么?
            • @Luc 正如 Leo 和 ytpillai 提到的,我们正在使用 integer 除法(除法后结果的小数部分被丢弃)。在 Python 3 中:16 // 6 >>> 216 / 6 >>> 2.6666666666666665
            【解决方案7】:

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

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

            【讨论】:

            • 我认为这个答案从概念的角度解释得最好。其他答案在数学上解释了这也是必要的,但这更好地帮助我理解如何应用模运算符。
            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

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

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

              所以,27 % 16 :-

              27- {(27/16)*16}

              27-{1*16}

              答案= 11

              注意

              所有计算都使用整数。在小数商的情况下,小数点后的部分将被忽略/截断。

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

              计算机语言的编译器也以相同的方式处理带小数部分的整数(通过截断小数部分)

              【讨论】:

              • 3 % 7 怎么样?
              • 所以只有 3 个?
              【解决方案10】:

              假设你有 17 个 mod 6。

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

              17 模 6=5

              【讨论】:

                【解决方案11】:

                小数点后的数字 (0.xxx) 较短时会更容易。然后你需要做的就是将该数字乘以除法后的数字。

                例如:32 % 12 = 8

                你做32/12=2.666666667 然后你扔掉2,专注于0.666666667 0.666666667*12=8

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

                【讨论】:

                  【解决方案12】:

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

                  20 % 3 = 2 
                  
                  1. 20 / 3 = 6;不要包含.6667 - 忽略它
                  2. 3 * 6 = 18
                  3. 20 - 18 = 2,是模的余数

                  【讨论】:

                  • 你能不能把这个答案格式化一下?
                  • 检查 Code Jammer 的回答。
                  【解决方案13】:

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

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

                  这意味着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}
                  

                  从这个角度来看,模数及其用途变得更加清晰。

                  【讨论】:

                    【解决方案14】:

                    写出一个以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 或作为小数扩展。模运算符仅返回 列,或者以另一种思维方式,它返回 long 的余数 分配。您正在处理模(5)。不同的模数,不同的表。 想想哈希表。

                    【讨论】:

                      【解决方案15】:

                      当我们将两个整数相除时,我们将得到一个如下所示的等式:

                      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.
                      

                      更多信息请参见Khan Academy Article

                      在计算机科学中,哈希表使用 Mod 运算符来存储元素,其中 A 是哈希后的值,B 是表的大小,R 是插入元素的槽数或键数。

                      更多信息请见How does a hash table works

                      【讨论】:

                        【解决方案16】:

                        这是我理解模数运算符的最佳方法。我将通过示例向您解释。

                        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 还剩下什么?是216 % 7 = 2

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

                        【讨论】:

                          【解决方案17】:

                          我还想补充一点:

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

                          股息 = 5 除数 = 3

                          5 % 3 = 2

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

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

                          股息 = 3 除数 = 5

                          3 % 5 = 3 ??怎么样

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

                          【讨论】:

                            【解决方案18】:

                            唯一需要理解的重要一点是,模数(这里用 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】:

                            27 % 16 = 11

                            你可以这样解读:

                            16 在通过之前进入 27 1 次。

                            16 * 2 = 32。

                            所以你可以说 16 是 27 中的一次,余数是 11。

                            其实

                            16 + 11 = 27

                            另一个例子:

                            20% 3 = 2

                            Well 3 在通过之前 6 次进入 20。

                            3 * 6 = 18

                            要加起来 20,我们需要 2,所以模数表达式的余数是 2。

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2022-10-16
                              • 1970-01-01
                              • 1970-01-01
                              • 2012-08-04
                              • 2017-06-06
                              • 2016-12-24
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多