NSW*_*WOA 97 language-agnostic math division modulo
我真的不明白模数除法是如何工作的.我正在计算27 % 16
和结束11
,我不明白为什么.
我似乎无法在网上找到外行人的解释.有人可以详细说明这里发生了什么吗?
小智 149
大多数解释都错过了一个重要的步骤,让我们用另一个例子填补空白.
鉴于以下内容:
Dividend: 16
Divisor: 6
Run Code Online (Sandbox Code Playgroud)
该模函数如下:
16 % 6 = 4
Run Code Online (Sandbox Code Playgroud)
我们来确定这是为什么.
首先,执行整数除法,类似于正常除法,除了丢弃任何小数(又称余数):
16 / 6 = 2
Run Code Online (Sandbox Code Playgroud)
然后,将上面的division(2
)的结果与我们的divisor(6
)相乘:
2 * 6 = 12
Run Code Online (Sandbox Code Playgroud)
最后,从我们的dividend()中减去上面乘法(12
)的结果:16
16 - 12 = 4
Run Code Online (Sandbox Code Playgroud)
这个减法的结果4
,即余数,与上述模数的结果相同!
Leo*_*Leo 103
这意味着:
27 / 16 = 1, remainder 11
=> 27 mod 16 = 11
Run Code Online (Sandbox Code Playgroud)
其他例子:
30 / 3 = 10, remainder 0
=> 30 mod 3 = 0
35 / 3 = 11, remainder 2
=> 35 mod 3 = 2
Run Code Online (Sandbox Code Playgroud)
Pri*_*ine 30
也许带时钟的例子可以帮助你理解模数.
熟悉的模数运算是在12小时制中使用,其中一天分为两个12小时.
让我们说我们目前这个时间:15:00
但你也可以说是下午3点
这正是模数所做的:
15 / 12 = 1, remainder 3
Run Code Online (Sandbox Code Playgroud)
您可以在维基百科上找到更好的解释这个例子:Wikipedia Modulo Article
Cod*_*mer 29
计算模数的简单公式是: -
[Dividend-{(Dividend/Divisor)*Divisor}]
Run Code Online (Sandbox Code Playgroud)
那么,27%16: -
27- {(27/16)*16}
27- {1*16}
答案= 11
注意:
所有计算都是整数.如果是小数,则忽略/截断小数点后的部分.
例如:27/16 = 1.6875在上述公式中仅为1.0.6875被忽略.
计算机语言的编译器也以相同的方式处理带小数部分的整数(通过截断十进制之后)
Reb*_*nix 15
模数运算符采用除法语句并返回该计算剩余的任何内容,即"剩余"数据,可以这么说,例如13/5 = 2.这意味着剩下3个,或者从该计算中剩余.为什么?因为2*5 = 10.因此,13 - 10 = 3.
模数运算符为您完成所有计算,13%5 = 3.
我还想补充一件事:
当红利大于/大于除数时,很容易计算模数
红利 = 5 除数 = 3
5 % 3 = 2
3)5(1
3
-----
2
Run Code Online (Sandbox Code Playgroud)
但是如果除数小于股息怎么办
红利 = 3 除数 = 5
3 % 5 = 3 ?? 如何
这是因为,既然 5 不能直接整除 3,那么模就是被除数