<分区>
模运算 a%b
返回 a/b
的余数,但对于负数则不会。
#include <stdio.h>
int main(void) {
int n=-4;
printf("%d\n",n%3);
return 0;
}
它应该返回 2,因为 3*(-2)=-6 刚好小于 -4 并且是 3 的倍数,但输出是 -1。
为什么它对待 (-a) mod b
和 -(a mod b)
<分区>
模运算 a%b
返回 a/b
的余数,但对于负数则不会。
#include <stdio.h>
int main(void) {
int n=-4;
printf("%d\n",n%3);
return 0;
}
它应该返回 2,因为 3*(-2)=-6 刚好小于 -4 并且是 3 的倍数,但输出是 -1。
为什么它对待 (-a) mod b
和 -(a mod b)
最佳答案
一般来说,求模和除法应该满足等式
b * (a/b) + a%b == a
对于正数,很明显这意味着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。
关于c - 负数的模运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30199474/