Оператор Mod (%) в C с большим делителем, чем делимое

Вот мой пример кода на C:

int x, y;
x = 7 % 10;
y = 10 % 7;
printf("%d, %d", x, y);

Он печатает: 7, 3

Я понимаю 10 % 7 = 3.

Я не понимаю 7 % 10 = 7.

Я пробовал тот же код, используя переменную типа float, и получил тот же ответ. Как работает мод, когда делитель больше дивиденда? Очень хотелось бы принципиально понять, как пользоваться этим оператором.


c mod
person Alex    schedule 04.11.2017    source источник
comment
Простите за вопрос, но провели ли вы ЛЮБЫЕ исследования самостоятельно?   -  person klutt    schedule 04.11.2017
comment
7 / 10 - это 0. Остаток - 7. Итак, 7 % 10 это 7.   -  person Tom Karzes    schedule 04.11.2017
comment
Также имейте в виду, что для положительных целых чисел a и b (a + b) % b совпадает с a % b. Другими словами, вы можете продолжать вычитать b, пока результат не станет меньше b, и это остаток.   -  person Tom Karzes    schedule 04.11.2017


Ответы (3)


Модуль возвращает остаток после деления.

7% 10 = 7, потому что 7/10 ‹1, например 10 не влезает ни разу из семи. Таким образом, все значение 7 становится остатком.

person negacao    schedule 04.11.2017

10 % 7 = 3 так потому, что 10 / 7 это 1. 1 * 7 + 3 = 10, следовательно, 3 - это остаток.

7 % 10 = 7 так потому, что 7 / 10 это 0. 0 * 10 + 7 = 7, следовательно, 7 - это остаток.

person cnettel    schedule 04.11.2017
comment
@ arosenfeld2003 Обратите внимание, что этот ответ работает и с отрицательными числами. Попробуйте несколько примеров с отрицательными числами. :) - person MFisherKDX; 04.11.2017

C11 6.5.5 Мультипликативные операторы

Пункт 5:

Результатом оператора / является частное от деления первого операнда на второй; результатом оператора% является остаток. В обеих операциях, если значение второго операнда равно нулю, поведение не определено.

Пункт 6:

Когда целые числа делятся, результатом оператора / является алгебраическое частное с отброшенной дробной частью. 105) Если частное a / b представимо, выражение (a / b) * b + a% b должно быть равно а; в противном случае поведение обоих a / b и a% b не определено.

Итак, здесь 7, разделенное на 10, равно 0 с остатком 7.

person msc    schedule 04.11.2017
comment
@Downvoter, чего мне здесь не хватает ?? - person msc; 04.11.2017
comment
Я просто поддержал все остальные ответы. Не уверен, почему мы все проиграли. - person negacao; 04.11.2017
comment
вероятно, потому что это очевидная тройная копия. На базовые вопросы C, подобные этому, есть ответ на переполнение стека. Люди склонны отрицать ответы на тривиальные вопросы. Я не знаю (я предпочитаю опускать вопросы без каких-либо исследований), но я могу понять. - person Jean-François Fabre; 05.11.2017