Как работает модуль деления

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

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

17 ответов

Решение

Результатом деления по модулю является остаток от целочисленного деления данных чисел.

Это означает:

27 / 16 = 1, remainder 11
=> 27 mod 16 = 11

Другие примеры:

30 / 3 = 10, remainder 0
=> 30 mod 3 = 0

35 / 3 = 11, remainder 2
=> 35 mod 3 = 2

В большинстве объяснений пропущен один важный шаг, давайте восполним пробел на другом примере.

Учитывая следующее:

Dividend: 16
Divisor: 6

Функция модуля выглядит следующим образом:

16 % 6 = 4

Давайте определимся, почему это так.

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

16 / 6 = 2

Затем умножьте результат вышеупомянутого деления (2) с нашим делителем (6):

2 * 6 = 12

Наконец, вычтите результат вышеупомянутого умножения (12) от нашего дивиденда (16):

16 - 12 = 4

Результат этого вычитания, 4, остаток, является тем же самым результатом нашего модуля выше!

Простая формула для расчета модуля:

[Dividend-{(Dividend/Divisor)*Divisor}]

Итак, 27% 16: -

27- {(27/16) * 16}

27- {1 * 16}

Ответ = 11

Примечание:

Все расчеты с целыми числами. В случае десятичного отношения, часть после десятичного знака должна быть проигнорирована / усечена.

например: 27/16= 1,6875 следует принимать как 1 в приведенной выше формуле. 0.6875 игнорируется.

Компиляторы компьютерных языков обрабатывают целое число с десятичной частью так же (путем усечения после десятичной)

Может быть, пример с часами поможет вам понять по модулю.

Знакомое использование модульной арифметики - это ее использование в 12-часовых часах, когда день делится на два 12-часовых периода.

Допустим, у нас на этот раз уже 15:00
Но вы также можете сказать, что это 3 часа дня

Это именно то, что делает по модулю:

15 / 12 = 1, remainder 3

Вы найдете этот пример лучше объясненным в Википедии: Wikipedia Modulo Article

Оператор модуля принимает оператор деления и возвращает то, что осталось от этого вычисления, так называемые "оставшиеся" данные, такие как 13 / 5 = 2. Это означает, что осталось 3 или осталось от этого вычисления. Зачем? потому что 2 * 5 = 10. Таким образом, 13 - 10 = 3.

Оператор модуля делает все эти вычисления за вас, 13 % 5 = 3.

Деление модуля просто так: разделить два числа и вернуть только остаток

27 / 16 = 1 с 11 осталось, поэтому 27 % 16 = 11

То же самое 43 / 16 = 2 с 11 оставшимися так 43 % 16 = 11 также

Очень просто: a % b определяется как остаток от деления a от b,

См. Статью в Википедии для большего количества примеров.

Я хотел бы добавить еще одну вещь:

легко вычислить по модулю, когда дивиденд больше / больше делителя

дивиденд = 5 делитель = 3

5% 3 = 2

3)5(1
  3
-----
  2

но что, если делитель меньше, чем дивиденд

дивиденд = 3 делитель = 5

3% 5 = 3 как

Это связано с тем, что, поскольку 5 не может делить 3 напрямую, по модулю будет получаться дивиденд

27 % 16 = 11

Вы можете интерпретировать это так:

16 идет 1 раз в 27 перед тем, как пройти.

16 * 2 = 32.

Таким образом, можно сказать, что 16 идет один раз из 27 с остатком 11.

По факту,

16 + 11 = 27

Другой пример:

20% 3 = 2

Лунка 3 проходит 6 раз в 20 перед тем, как пройти.

3 * 6 = 18

Чтобы сложить до 20, нам нужно 2, поэтому остаток выражения модуля равен 2.

Я надеюсь, что эти простые шаги помогут:

20 % 3 = 2 
  1. 20 / 3 = 6; не включать .6667 - просто игнорируй это
  2. 3 * 6 = 18
  3. 20 - 18 = 2, который является остатком по модулю

Проще, когда ваш номер после запятой (0.xxx) короткий. Тогда все, что вам нужно сделать, это умножить это число на число после деления.

Пример: 32 % 12 = 8

Ты сделаешь 32/12=2.666666667Затем вы бросаете 2 прочь и сосредоточиться на 0.6666666670.666666667*12=8 <- Это твой ответ.

(опять же, легко, только если число после десятичной точки короткое)

Единственная важная вещь для понимания - это то, что модуль (обозначаемый здесь как%, как в 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

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

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

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

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

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

17 мод 6=5

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

    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.

Это означает, что последовательность для набора 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}

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

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

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

{0,1,2,3,4}

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

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

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

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

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

А - дивиденд; 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 - числом слотов или ключом, в который вставлен элемент.

Посмотрите, как работает хеш-таблица для получения дополнительной информации

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

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? Является 216 % 7 = 2

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

Другие вопросы по тегам