【发布时间】:2015-07-23 20:02:05
【问题描述】:
模运算 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) 一样
【问题讨论】:
-
因为模组就是这样工作的?
-4 % 3 === -1,不是-2。 -
如果你尝试将 -4 分成 3 份,你会得到 3 份尺寸 -1 和 1 份你无法分割的尺寸 -1。 (也就是说,如果结果为 +2 且 -4/3 的结果为 -2,则它会更有用,但我们坚持返回 -1。)
-
请注意,“-4 减去 -6”等于“-4 加上 +6”等于“+2”而不是“-2”。不,数学规则始终适用:就像“+4 模 3”等于“+1”一样,“-4 模 3”等于“-1”。
标签: c modulo negative-number