c - 负数的模运算

标签 c modulo negative-number

<分区>

模运算 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。如果我们插入 ab,我们会得到 -3 + a%b == -4,我们会看到 a% b 必须为 -1。

关于c - 负数的模运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30199474/

相关文章:

c - while 循环在每次迭代中工作两次

c - 如何可移植地将变量声明为线程本地变量?

modulo - 如何在 Basic 中获取给定数字的每个数字?

c - 为什么-1在内部表示为全1

我可以通过为封闭结构分配更多空间来 "over-extend"数组吗?

C90 编译器提示没有原型(prototype)函数警告

c - 使用负数时模返回错误结果

python - Python 中的模数和运算顺序

c - 对数组中的负数元素进行排序

c++ - 将二进制转换为负整数