对负数进行模运算

Abh*_*ora 0 c modulo negative-number

模运算a%b返回余数,a/b但对于负数,它不会这样做.

#include <stdio.h>

int main(void) {
  int n=-4;
  printf("%d\n",n%3);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它应返回2为3*( - 2)= - 6小于-4且倍数为3但输出为-1.为什么它(-a) mod b一样对待-(a mod b)

Frx*_*rem 5

作为一般规则,模和除法应满足等式

b * (a/b) + a%b == a
Run Code Online (Sandbox Code Playgroud)

对于正数,很明显这意味着a%b必须是正数.但如果a/b是负数,那么结果将四舍五入为零.

因此,例如a = -4,b = 3.我们知道a/b = -1.3333,向零舍入变为a/b == -1.从上面的等式,我们有b * (-1) + a%b == a.如果我们插入ab,我们得到-3 + a%b == -4的,我们看到,a%b必须为-1.