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