Как работает модуль Divison
Я действительно не понимаю, как работает модульное подразделение. Я рассчитывал 27 % 16
и получил 11
и я не понимаю, почему.
Кажется, я не могу найти объяснения в условиях неспециалиста в Интернете. Может кто-то подробно рассказать о том, что здесь происходит?
- Что называется mangling, и как это работает?
- Как разработать и протестировать приложение, отправляющее электронные письма (без заполнения чей-то почтового ящика с тестовыми данными)?
- Как мне сделать сравнение с плавающей запятой?
- Частные и общественные участники на практике (насколько важно инкапсуляция?)
- Подписанные и неподписанные целые числа
Результатом модульного деления является остаток от целочисленного деления данных чисел.
Это значит:
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
, остатка , является тот же результат нашего модуля выше!
Может быть, пример с часами может помочь вам разобраться в модуле.
Знакомое использование модульной арифметики – это ее использование в 12-часовом такте, в котором день делится на два 12-часовых периода.
Допустим, сейчас у нас есть: 15:00
Но вы также можете сказать, что это 3 часа дня.
Это именно то, что делает modulo:
15 / 12 = 1, remainder 3
Вы найдете этот пример лучше объясненным в wikipedia: Wikipedia Modulo Article
Простая формула для расчета модуля:
[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.
модульное деление просто: разделите два числа и верните только остаток
27/16 = 1 с оставленными 11, поэтому 27% 16 = 11
то же самое 43/16 = 2, у 11 осталось больше 43% 16 = 11 тоже
Очень просто: a % b
определяется как остаток от деления a
на b
.
См. Статью в Википедии для получения дополнительных примеров.
Я надеюсь, что эти простые шаги помогут:
20 % 3 = 2
-
20 / 3 = 6
; не включайте.6667
– просто игнорируйте его -
3 * 6 = 18
-
20 - 18 = 2
, что является остатком по модулю
Разделение по модулю дает вам остальную часть деления, а не частное.
Допустим, у вас есть 17 мода 6.
то, что всего 6, приблизит вас к 17, это будет 12, потому что если вы перейдете через 12, у вас будет 18, что больше того, что вопрос 17 мода 6. Затем вы получите 12 и минус с 17, что даст вам ваш ответ, в этом случае 5.
17 mod 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.xxx) коротким. Тогда все, что вам нужно сделать, это умножить на это число с номером после деления.
Пример: 32 % 12 = 8
Вы делаете 32/12=2.666666667
Затем вы бросаете 2
, и сосредоточьтесь на 0.666666667
0.666666667*12=8
<- Это ваш ответ.
(опять же, просто, когда число после десятичного разряда коротки)
Я хотел бы добавить еще одну вещь:
легко вычислять по модулю, когда дивиденд больше / больше, чем дивизор
дивиденд = 5 дивизор = 3
5% 3 = 2
3)5(1 3 ----- 2
но что, если дивизор меньше дивиденда
дивиденд = 3 делитель = 5
3% 5 = 3 как
Это потому, что, поскольку 5 не могут делить 3 напрямую, по модулю будет дивиденд
Это просто, оператор модуля (%) возвращает остаток после целочисленного деления. Давайте рассмотрим пример вашего вопроса. Как 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). Различные модули, разные таблицы. Подумайте о hash-таблице.
Когда мы разделим два целых числа, мы получим уравнение, которое выглядит следующим образом:
A / B = Q остаток R
А – дивиденд; B – дивизор; Q – фактор, а R – остаток
Иногда нас интересует только то, что осталось, когда мы делим A на B. Для этих случаев существует оператор, называемый модульным оператором (сокращенно mod).
Примеры
16/5= 3 Remainder 1 ie 16 Mod 5 is 1. 0/5= 0 Remainder 0 ie 0 Mod 5 is 0. -14/5= 3 Remainder 1 ie -14 Mod 5 is 1.
См. Статью Академии Хана для получения дополнительной информации.
В информатике в таблице Hash используется оператор Mod для хранения элемента, где A будет значением после hashирования, B будет размером таблицы, а R – количеством слотов или ключей, в которые вставлен элемент.
См. Как работает hash-таблица для получения дополнительной информации
Это был лучший подход для меня для понимания оператора модуля. Я просто объясню вам примеры.
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 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24
24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24
. Таким образом, остаток равен нулю, 24 % 6 = 0