19

如果这是一个简单的问题,我深表歉意,但是当第一个数字小于第二个数字时,我无法理解模除的概念。例如,当 1 % 4 我的书说余数是 1。我不明白 1 是 1 % 4 的余数
。1 / 4 是 0.25。我是否在错误地考虑模数除法?

4

6 回答 6

9

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

于 2013-05-01T01:56:46.410 回答
7

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

于 2013-05-01T01:56:28.767 回答
5

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

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

基本上是因为:

n = a / b (integer), and
m = a % b = a - ( b * n )

所以,

 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

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

于 2017-02-13T13:00:31.353 回答
2

另一种将其视为您的数字以另一个数字的倍数表示的方式。即,a = n*b + r在哪里b>r>=0。从这个意义上说,您的情况给出了1 = 0*4 + 1. (编辑:仅谈论正数)

于 2013-05-01T02:00:19.463 回答
0

我认为您在%(Remainder)/(Division)运算符之间感到困惑。

当你说 时%,你需要不断地除以股息,直到你得到余数 0 或可能的结尾。而你最终得到的叫做Remainder.

当您说 时/,您将除数除以,直到除数变为 1。您得到的最终产品称为Quotient

于 2013-05-01T02:02:49.923 回答
0

另一种解决问题的好方法,在模数中,如果第一个数字大于第二个数字,则从第一个数字中减去第二个数字,直到第一个数字小于第二个数字。

17 % 5 = ?
17 - 5 = 12
12 % 5 = ?
12 - 5 = 7
7 % 5 = ?
7 - 5 = 2
2 % 5  = 2

因此 17 % 5、12 % 5、7 % 5 都给出 2 的答案。这是因为 2 / 5 = 0(使用整数时),余数为 2。

于 2016-02-09T00:12:30.813 回答