Оператор мода (%) в С с большим делителем, чем дивиденд
Вот мой пример кода на C:
int x, y;
x = 7 % 10;
y = 10 % 7;
printf("%d, %d", x, y);
Это печатает: 7, 3
я понимаю 10 % 7 = 3
,
Я не понимаю 7 % 10 = 7
,
Я попробовал тот же код, используя переменную с плавающей точкой и получил тот же ответ. Как работает мод, когда делитель больше, чем дивиденд? Мне бы очень хотелось принципиально понять, как использовать этот оператор.
3 ответа
Модуль возвращает остаток после деления.
7% 10 = 7, потому что 7 / 10 < 1, например, 10 не подходит ни разу в семь. Таким образом, все значение 7 становится остатком.
10 % 7 = 3
это потому что 10 / 7
является 1
, 1 * 7 + 3 = 10
следовательно, 3 - это остаток.
7 % 10 = 7
это потому что 7 / 10
является 0
, 0 * 10 + 7 = 7
следовательно, 7 - это остаток.
C11 6.5.5 Мультипликативные операторы
Пункт 5:
Результатом оператора / является частное от деления первого операнда на второй; результат оператора% - остаток. В обеих операциях, если значение второго операнда равно нулю, поведение не определено.
Пункт 6:
Когда целые числа делятся, результатом оператора / является алгебраическое частное с любой отброшенной дробной частью.105) Если частное a/b представимо, выражение (a/b)*b + a%b должно быть равно a; в противном случае поведение как a/b, так и% b не определено.
Итак, здесь 7, деленное на 10 - это 0 с остатком 7.