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