Прошу прощения, если это простой вопрос, но мне трудно понять концепцию модульного деления, когда первое число меньше второго. Например, когда 1% 4 моя книга говорит, что остаток равен 1. Я не понимаю, как 1 является остатком от 1% 4.
1/4 составляет 0,25. Я неправильно думаю о делении модуля?
Деление модуля, когда первое число меньше второго числа
Ответы (6)
Во-первых, в Java% - это оператор остатка (не по модулю), семантика которого немного отличается. Тем не менее, вы должны мыслить в терминах деления только на целые числа, как если бы не было дробных значений. Думайте об этом как о хранении элементов, которые нельзя разделить: вы можете хранить ноль элементов размера 4 в хранилище общей емкостью один. Ваша оставшаяся емкость после хранения максимального количества элементов равна единице. Точно так же 13% 5 равно 3, так как вы можете уместить 2 полных элемента размера 5 в хранилище размера 13, а оставшаяся емкость составляет 13 - 2*5 = 3
.
5 % 13
)
- person misberner; 01.05.2013
%
- person MaxZoom; 09.06.2015
Если вы разделите 1 на 4, вы получите 0 с остатком 1. Это все, что есть модуль, остаток после деления.
Я собираюсь добавить более практический пример к тому, что уже сказал Жан-Бернар Пеллерен.
Это правильно, если вы разделите 1 на 4, вы получите 0, но почему, когда вы делаете 1% 4, вы получаете 1 в результате?
В основном это потому, что это:
n = a / b (integer), and
m = a % b = a - ( b * n )
So,
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 »
Другой способ думать об этом как о представлении вашего числа, кратного другому числу. То есть a = n*b + r
, где b>r>=0
. В этом смысле ваш случай дает 1 = 0*4 + 1
. (править: говорить только о положительных числах)
Я думаю, вы запутались между операторами %(Remainder)
и /(Division)
.
Когда вы говорите %
, вам нужно продолжать делить дивиденд до тех пор, пока вы не получите остаток 0 или возможный конец. И то, что вы получаете в итоге, называется Remainder
.
Когда вы говорите /
, вы делите дивиденд до тех пор, пока делитель не станет равным 1. И конечный продукт, который вы получите, называется Quotient
.
Еще один хороший способ прояснить ситуацию. По модулю, если первое число> второго числа, вычтите второе число из первого, пока первое число не станет меньше второго.
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 в качестве остатка.