我知道模数会返回余数,我倾向于这样看:13%5 = 3,5两次进入13,剩下3次
但是怎么来
1 % 5 = 1
2 % 5 = 2
3 % 5 = 3
5变成1一次,右边还有0?
只是想看看我应该如何看待以获得理解,谢谢
1%5中的余数是指除以5后剩下的1(不是5)的余数。5变成1零次。因此-当您从1删除5的0的倍数时,所有1仍然保留。因此1%5 = 1。
模运算符返回除法后的余数。
例如,
int i = 13 % 5;
将i设置为3。
[从Euclidian division,我们知道对于每两个整数a
和b
(b!=0
),存在唯一的整数q
和r
,使得a = b * q + r
和0 <= r < |b|
。
现在,%
,即modulo operator,返回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
好问题!
以下是%(模)运算符的一些有趣的事实:
余数运算符可用于获取任何数字的最后一位(基于您使用的数字系统);像股息%10会给您十进制数字系统的最后一位数字。
在Java中,它可以与任何数字数据类型(例如字节,短,整数,长,浮点和双精度)一起使用。
它同时适用于(正数和负数)数字。负数的结果由分红的符号决定;表示如果股息为正,则结果将为正;如果股息为负,则结果也将为负。就像20%(-3)= 2但-20%(-3)= -2(股息-20为负)。
您的问题和有趣的事实的答案(摘自下面的链接):
二进制数字提升后为整数的操作数的余数运算会产生结果值,使得(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