【发布时间】:2019-11-08 14:12:11
【问题描述】:
我在一个我应该修复的程序中发现了一个定义了 mod 函数的函数:
int mod(int a, int b)
{
int i = a%b;
if(i<0) i+=b;
return i;
}
有人告诉我,a 和 b 将永远是积极的...
嗯? if(i<0)?
参数是that
模运算的结果是一个等价类,可以选择该类的任何成员作为代表
只是事后才考虑
...;然而,通常的代表是最小正余数,属于该类的最小非负整数,即欧几里得除法的余数。然而,其他约定也是可能的。
这意味着6 % 7 可以返回6(到目前为止还不错),但也可以返回-1。嗯……真的吗? (让我们忽略所呈现的实现不能处理所有情况的事实。)
我知道模运算是这样的,在数学上是正确的。但是后来有人告诉我,C % 实际上“没有实现模运算符,而是实现了余数”。
那么,C 是如何定义% 运算符的呢?
我只在 C-Draft 中找到
/ 运算符的结果是第一个操作数除以 第二; % 运算符的结果是余数。在这两种操作中,如果 第二个操作数为零,行为未定义。
这是否意味着6 % 7 总是6?或者也可以是-1?
【问题讨论】:
标签: c division modulo integer-division