c99标准规定模运算的结果与第一个操作数的符号相同。所以-9 % 7 = -2
和9 % -7 = 2
。
我在一本书中读到,c89 标准取决于实现。那么-9 % 7
可以产生-2
还是5
??? 剩余的-9 / 7
可能是5
多少?
考虑两个数字a
和b
。
商q=a/b
和余数r=a%b
满足方程a == q*b + r
。
C89 的(假设)实现,其中 -9 % 7 产生 5 是其中 -9 / 7 计算为 -2 的实现。
数学(欧几里得)除法约束r
为正且小于b
。C99 将其限制为与 和 之间的符号相同a
且严格介于-b
和之间b
。这只是一个约定俗成的问题。
%
运算符定义为:
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