Ответы:
Результатом деления по модулю является остаток от целочисленного деления заданных чисел.
Это значит:
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
) на наш divisor ( 6
):
2 * 6 = 12
Наконец, вычтите результат вышеуказанного умножения ( 12
) из нашего дивиденда ( 16
):
16 - 12 = 4
Результат этого вычитания 4
, то остаток , тот же результат нашего модуля выше!
16 // 6 >>> 2
и16 / 6 >>> 2.6666666666666665
Возможно, пример с часами поможет вам разобраться в модуле.
Известное применение модульной арифметики - использование 12-часовых часов, в которых день делится на два 12-часовых периода.
Допустим, у нас сейчас это время: 15:00,
но вы также можете сказать, что это 15:00.
Это именно то, что делает modulo:
15 / 12 = 1, remainder 3
Этот пример лучше объяснен в Википедии: Статья в Википедии по модулю
Простая формула для расчета модуля: -
[Dividend-{(Dividend/Divisor)*Divisor}]
Итак, 27% 16: -
27- {(27/16) * 16}
27- {1 * 16}
Ответ = 11
Примечание :
Все вычисления производятся с целыми числами. В случае десятичного частного часть после десятичной точки должна быть проигнорирована / усечена.
например: 27/16 = 1,6875 следует принимать как 1 в приведенной выше формуле. 0,6875 игнорируется.
Компиляторы компьютерных языков обрабатывают целое число с десятичной частью таким же образом (путем усечения после десятичной части).
Оператор модуля принимает оператор деления и возвращает все, что осталось от этого вычисления, так сказать "оставшиеся" данные, например, 13/5 = 2. Это означает, что осталось 3 или оставшихся от этого вычисления. Зачем? потому что 2 * 5 = 10. Таким образом, 13 - 10 = 3.
Оператор модуля выполняет все эти вычисления за вас, 13% 5 = 3.
Очень просто: a % b
определяется как остаток от деления a
на b
.
Хочу еще кое-что добавить:
легко вычислить по модулю, когда дивиденд больше / больше делителя
дивиденд = 5 делитель = 3
5% 3 = 2
3)5(1
3
-----
2
а что, если делитель меньше делимого
дивиденд = 3 делитель = 5
3% 5 = 3 ?? как
Это потому, что, поскольку 5 не может делить 3 напрямую, по модулю будет то, что есть дивиденд
Надеюсь, эти простые шаги помогут:
20 % 3 = 2
20 / 3 = 6
; не включайте .6667
- просто игнорируйте3 * 6 = 18
20 - 18 = 2
, который является остатком по модулюПроще, если ваше число после десятичной дроби (0.xxx) будет коротким. Затем все, что вам нужно сделать, это умножить это число на число после деления.
Пример: 32 % 12 = 8
Вы делаете 32/12=2.666666667
Затем вы выбрасываете 2
и сосредотачиваетесь на 0.666666667
0.666666667*12=8
<- Это ваш ответ.
(опять же, это просто, когда число после десятичной дроби короткое)
Деление модуля довольно просто. Вместо частного используется остаток.
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}
В этом свете модуль упругости, а также его использование становятся намного яснее.
Единственное, что важно понять, это то, что модуль (обозначенный здесь%, как в 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
Вы можете интерпретировать это так:
16 идет 1 раз в 27 перед тем, как пройти.
16 * 2 = 32.
Таким образом, можно сказать, что 16 идет один раз из 27 с остатком 11.
По факту,
16 + 11 = 27
Другой пример:
20% 3 = 2
Лунка 3 переходит 6 раз в 20 перед тем, как пройти.
3 * 6 = 18
Чтобы прибавить к 20, нам нужно 2, поэтому остаток выражения модуля равен 2.
Это просто, оператор модуля (%) возвращает остаток после целочисленного деления. Возьмем, к примеру, ваш вопрос. Как 27% 16 = 11? Когда вы просто разделите 27 на 16, то есть (27/16), вы получите остаток как 11, и поэтому ваш ответ - 11.
Напишите таблицу, начинающуюся с 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
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 - количеством слотов или ключом, в который вставлен элемент.
Для получения дополнительной информации см. Как работает хеш-таблица.
Для меня это был лучший подход к пониманию оператора модуля. Я просто объясню вам на примерах.
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
16 % 7 = 2
Еще один: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24
. Итак, остаток равен нулю,24 % 6 = 0