Извиняюсь, если это простой вопрос, но у меня возникли проблемы с пониманием понятия модульного деления, когда первое число меньше второго. Например, когда 1% 4 в моей книге говорится, что остаток равен 1. Я не понимаю, как 1 - остаток 1% 4.
1/4 - 0.25. Я неправильно думаю о модульном подразделении?
Разделение по модулю при первом числе меньше второго номера
Ответ 1
Во-первых, в Java% - это оператор остатка (немодуля), который имеет несколько другую семантику.
Тем не менее, вам нужно думать в терминах целочисленного деления, как если бы не было дробных значений. Подумайте об этом как о хранении предметов, которые нельзя разделить: вы можете хранить нулевые предметы размером 4 в хранилище общей емкости. Ваша оставшаяся емкость после хранения максимального количества элементов - одна. Аналогично, 13% 5 равно 3, так как вы можете поместить 2 полных элемента размером 5 в хранилище размером 13, а оставшаяся емкость 13 - 2*5 = 3
.
Ответ 2
Если вы разделите 1 на 4, вы получите 0 с остатком 1. То, что весь модуль равен, остаток после деления.
Ответ 3
Еще один способ подумать об этом как о представлении вашего числа в нескольких числах другого числа. I.e, a = n*b + r
, где b>r>=0
. В этом смысле ваш случай дает 1 = 0*4 + 1
. (редактировать: говорить только о положительных числах)
Ответ 4
Я думаю, вы запутались между операторами %(Remainder)
и /(Division)
.
Когда вы говорите %
, вам нужно продолжать делиться дивидендом, пока не получите остаток 0 или возможный конец. И то, что вы получаете в конце, называется Remainder
.
Когда вы говорите /
, вы делите дивиденд, пока делитель не станет равным 1. И конечный продукт, который вы получаете, называется Quotient
Ответ 5
Еще один приятный метод, чтобы прояснить ситуацию, В модуле, если первое число является вторым номером, вычтите второе число из первого, пока первое число не станет меньше второго.
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 в качестве остатка.
Ответ 6
Я собираюсь добавить более практичный пример того, что уже сказал "Жан-Бернард Пеллерин".
Правильно, что если вы разделите 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, результат% b будет "a"