c99标准指出,模块化操作的结果与第一个操作数具有相同的符号。所以-9 % 7 = -2和9 % -7 = 2。
我在一本书中读到c89标准依赖于实现。所以-9 % 7可以产生-2或-2-9 / 7的剩余部分如何可以是5
发布于 2012-11-03 10:34:34
考虑两个数字a和b。
商q=a/b和剩余r=a%b满足a == q*b + r方程。
-9 %7产生5的C89 (假设的)实现是将-9 /7计算为-2的实现。
数学(欧几里得)除法约束r为正且小于b。C99将其限制为与a相同的符号,并严格限制在-b和b之间。这只是一个惯例的问题。
发布于 2012-11-03 10:35:55
%运算符被定义为:
a == (a / b * b) + a % b所以
a % b = a - (a / b * b)%作为余数运算符
如果/向0 (如C99)射击:
-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 == 5https://stackoverflow.com/questions/13208287
复制相似问题