Как работает модуль деления - PullRequest
94 голосов
/ 19 апреля 2010

Я не очень понимаю, как работает разделение модулей. Я вычислял 27 % 16 и получил 11, и я не понимаю, почему.

Кажется, я не могу найти объяснения в терминах обывателя онлайн. Может ли кто-нибудь подробно рассказать о том, что здесь происходит?

Ответы [ 18 ]

1 голос
/ 19 апреля 2010

Модуль деления дает вам остаток от деления, а не частное.

1 голос
/ 21 августа 2014

Модуль деления довольно прост. Он использует остаток вместо частного.

    1.0833... <-- Quotient
   __
12|13
   12
    1 <-- Remainder
    1.00 <-- Remainder can be used to find decimal values
     .96
     .040
     .036
     .0040 <-- remainder of 4 starts repeating here, so the quotient is 1.083333...

13/12 = 1R1, следовательно 13% 12 = 1.


Помогает думать о модуле как о "цикле".

Другими словами, для выражения n % 12 результат будет всегда будет <12. </p>

Это означает, что последовательность для набора 0..100 для n % 12:

{0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10,11,0,[...],4}

В этом свете модуль, а также его использование становятся намного понятнее.

1 голос
/ 18 мая 2019

Единственная важная вещь, которую нужно понять, это то, что модуль (обозначается здесь как%, как в C) определяется через евклидово деление .

Для любых двух (d, q) целых чисел следующее всегда верно :

d = ( d / q ) * q + ( d % q )

Как видите, значение d%q зависит от значения d/q. Обычно для положительных целых чисел d/q является усеченным до нуля , например 5/2 дает 2, следовательно:

5 = (5/2)*2 + (5%2) => 5 = 2*2 + (5%2) => 5%2 = 1

Однако для отрицательных целых чисел ситуация менее ясна и зависит от языка и / или стандарта. Например, -5/2 может возвращать -2 (обрезается до нуля, как и раньше), но также может возвращать -3 (с другим языком).

В первом случае:

-5 = (-5/2)*2 + (-5%2) => -5 = -2*2 + (-5%2) => -5%2 = -1

но во втором:

-5 = (-5/2)*2 + (-5%2) => -5 = -3*2 + (-5%2) => -5%2 = +1

Как было сказано ранее, просто запомните инвариант , который является евклидовым делением .

Более подробная информация:

1 голос
/ 19 июня 2013

Допустим, у вас есть 17 мод 6.

, что из 6 даст вам самое близкое к 17, это будет 12, потому что если вы наберете 12, у вас будет 18, что больше, чем вопрос 17 мода 6. Затем вы возьмете 12 и минус от 17, которые даст вам ответ, в данном случае 5.

17 мод 6 = 5

0 голосов
/ 11 марта 2013

Все просто, оператор модуля (%) возвращает остаток после целочисленного деления. Давайте возьмем пример вашего вопроса. Как 27% 16 = 11? Когда вы просто делите 27 на 16, то есть (27/16), тогда вы получаете остаток как 11, и поэтому ваш ответ - 11.

0 голосов
/ 03 марта 2016

Когда мы разделим два целых числа, мы получим уравнение, которое выглядит следующим образом:

A / B = Q остаток R

A - дивиденд;B - делитель;Q является частным, а R является остатком

Иногда нас интересует только то, что является остатком, когда мы делим A на B. Для этих случаев есть оператор, называемый оператором по модулю (сокращенно как mod).

Примеры

16/5= 3 Remainder 1  i.e  16 Mod 5 is 1.
0/5= 0 Remainder 0 i.e 0 Mod 5 is 0.
-14/5= 3 Remainder 1 i.e. -14 Mod 5 is 1.

См. Статья Академии Хана для получения дополнительной информации.

В области компьютерных наук в хэш-таблице используется оператор Mod для хранения элемента, гдеA - это значения после хэширования, B - размер таблицы, а R - количество слотов или ключа, в который вставлен элемент.

См. Как работает хеш-таблица для получения дополнительной информации

0 голосов
/ 17 апреля 2016

Это был лучший подход для понимания оператора модуля. Я просто объясню вам на примерах.

16 % 3

Когда вы делите эти два числа, результатом является остаток. Вот как я это делаю.

16 % 3 = 3 + 3 = 6; 6 + 3 = 9; 9 + 3 = 12; 12 + 3 = 15

Так что осталось до 16 это 1

16 % 3 = 1

Вот еще один пример: 16 % 7 = 7 + 7 = 14 что осталось до 16? 2 1014 *

Еще один: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24. Таким образом, остаток равен нулю, 24 % 6 = 0

0 голосов
/ 30 марта 2015

Запишите таблицу, начиная с 0.

{0,1,2,3,4}

Продолжить таблицу в строках.

{0,1,2,3,4}
{5,6,7,8,9}
{10,11,12,13,14}

Все в первом столбце кратно 5. Все в столбце 2 является кратный 5 с 1 в качестве остатка. Теперь абстрактная часть: вы можете написать что (1) как 1/5 или как десятичное расширение. Оператор модуля возвращает только столбец, или, по-другому, он возвращает остаток на долго разделение. Вы имеете дело с модулем (5). Другой модуль, другой стол. Подумайте о хэш-таблице.

...