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

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

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

Ответы [ 18 ]

138 голосов
/ 04 декабря 2012

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

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

Dividend: 16
Divisor: 6

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

16 % 6 = 4

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

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

16 / 6 = 2

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

2 * 6 = 12

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

16 - 12 = 4

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

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

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

Это значит:

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
30 голосов
/ 19 апреля 2010

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

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

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

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

15 / 12 = 1, remainder 3

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

29 голосов
/ 12 июня 2013

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

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

Итак, 27% 16: -

27- {(27/16) * 16}

27- {1 * 16}

Ответ = 11

Примечание

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

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

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

15 голосов
/ 20 января 2013

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

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

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

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

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

То же самое 43/16 = 2 с 11 осталось, поэтому 43% 16 = 11 тоже

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

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

См. статью в Википедии для дополнительных примеров.

3 голосов
/ 08 апреля 2014

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

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

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

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

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

5% 3 = 2

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

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

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

3% 5 = 3 ?? как

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

1 голос
/ 08 января 2014

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

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

Вы делаете 32/12=2.666666667 Затем вы выбрасываете 2 и сосредотачиваетесь на 0.666666667 0.666666667*12=8 <- Это твой ответ. </p>

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

...