5

c99标准规定模运算的结果与第一个操作数的符号相同。所以-9 % 7 = -29 % -7 = 2

我在一本书中读到,c89 标准取决于实现。那么-9 % 7可以产生-2还是5??? 剩余的-9 / 7可能是5多少?

4

2 回答 2

7

考虑两个数字ab

q=a/b和余数r=a%b满足方程a == q*b + r

C89 的(假设)实现,其中 -9 % 7 产生 5 是其中 -9 / 7 计算为 -2 的实现。

数学(欧几里得)除法约束r为正且小于b。C99 将其限制为与 和 之间的符号相同a且严格介于-b和之间b。这只是一个约定俗成的问题。

于 2012-11-03T10:34:34.893 回答
4

%运算符定义为:

a == (a / b * b) + a % b

所以

a % b = a - (a / b * b)

% 作为余数运算符

如果向(如 C99)/四舍五入:0

-9 % 7 == -2

你有-9 / 7 == -1%-2因为

-9 % 7 == -9 - (-9 / 7 * 7) + 9 == -9 + 7 == -2 

% 作为模运算符

如果/向负无穷舍入:

-9 % 7 == 5

你有-9 / 7 == -2所以%5

-9 % 7 == -9 - (-9 / 7 * 7) + 9 == -9 + 14 == 5
于 2012-11-03T10:35:55.787 回答