当第一个数小于第二个数时,模数除法

Jes*_* M. 14 java arithmetic-expressions modulo integer-division

如果这是一个简单的问题,我很抱歉,但是当第一个数字小于第二个数字时,我无法理解模数除法的概念.例如,当我的书中1%4表示余数为1.我不明白1是1%4的剩余部分
.1/4是0.25.我在考虑模数除法错误吗?

mis*_*ner 9

首先,在Java中,%是余数(非模数)运算符,它具有稍微不同的语义.也就是说,您需要考虑仅整数除法,就好像没有小数值一样.可以将其视为存储无法分割的项目:您可以将4个大小为4的项目存储在总容量为1的存储中.存储最大数量的项目后,您的剩余容量为1.同样,13%5是3,因为你可以在13号存储中装入2个5号的完整物品,剩下的容量是13 - 2*5 = 3.

  • @Ravi你肯定是错的(如果你把Oracle作为参考),请查看http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html (3认同)
  • 当第一个数字大于第二个时,我理解余数除法。所以我知道 13 % 5 是 3。我不明白的是,如果 5 % 13 时答案会是什么。 (2认同)
  • 它也被称为模运算符! (2认同)
  • @Ravi:事实并非如此,Modulus和Remainder之间存在差异(参见http://blogs.msdn.com/b/ericlippert/archive/2011/12/05/what-s-the-difference -remainder-VS-modulus.aspx).它会影响结果的符号是否遵循被除数或除数是否为负值.Javas%运算符实现了余数语义. (2认同)

Jea*_*rin 6

如果将1除以4,则得到0,余数为1.这就是所有模数,即除法后的余数.


Jor*_*ego 5

我将在“Jean-Bernard Pellerin”已经说过的内容中添加一个更实际的例子。

如果将 1 除以 4 得到 0 是正确的,但是为什么当你做 1 % 4 时结果是 1?

基本上是因为这个:

n = a / b (integer), and
m = a % b = a - ( b * n )
Run Code Online (Sandbox Code Playgroud)

所以,

 a    b    n = a/b  b * n  m = a%b
 1    4      0        0      1    
 2    4      0        0      2
 3    4      0        0      3
 4    4      1        0      0
 5    4      1        4      1
Run Code Online (Sandbox Code Playgroud)

结论:当 a < b 时,a % b 的结果将是“a”