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)
作为一般规则,模和除法应满足等式
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.如果我们插入a和b,我们得到-3 + a%b == -4的,我们看到,a%b必须为-1.