需要帮助理解模运算符

Need help understanding modulus operator

我理解模returns余数,我倾向于这样看: 13 % 5 = 3, 5 进入 13 两次,剩下 3

可是怎么会

1 % 5 = 1
2 % 5 = 2
3 % 5 = 3

5 进 1 一次,0 左边在右边?

只是想看看我应该如何看待这个以获得理解,谢谢

取模运算符returns除法后的余数

例如,

int i = 13 % 5;

会将 i 设置为 3。

1%5的余数是指1(不是5)除以5后的余数。5进1零次。所以——当你从 1 中删除 0 个 5 的倍数时,所有的 1 都会保留下来。因此 1 % 5 = 1.

Refer to this for a even better understanding

Euclidian division,我们知道对于每两个整数abb!=0),存在唯一的整数qr 这样 a = b * q + r0 <= r < |b|.

现在,%modulo operator,returns r。对于您的示例:

 1 % 5:  1 = 5 * 0 + 1 => r = 1
 2 % 5:  2 = 5 * 0 + 1 => r = 2
13 % 5: 13 = 5 * 2 + 3 => r = 3 

好问题!

以下是 %(模数)运算符的一些有趣事实:

  • 余数运算符可用于获取任何数字的最后一位(取决于您使用的数字系统);像 dividend % 10 会给你十进制数系统的最后一位。

  • 在java中,它可以用于任何数字数据类型(如byte、short、int、long、float和double)。

  • 它适用于两个(正数和负数)数字。而负数的结果由被除数的符号决定;意味着如果股息为正,结果将为正,如果股息为负,结果也将为负。像 20 % (-3) = 2 但 -20 % (-3) = -2(股息 -20 为负)。

你的问题的答案和有趣的事实(摘自下面的link):

  • 二进制数值提升后的整数操作数的余数运算产生的结果值使得 (a/b)*b+(a%b) 等于 a.

    即使在被除数是其类型的最大可能负整数且除数为 -1(余数为 0)的特殊情况下,此恒等式也成立。

    从这个规律可以看出,只有被除数为负,余数运算的结果才能为负,只有被除数为正,才能为正。而且,结果的大小总是小于除数的大小。

    如果整数余数运算符的除数值为 0,则抛出 ArithmeticException。

看看 java 怎么说 https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.17.3

  • 多用于循环数组和哈希表中,以包含限制中的元素。