【发布时间】:2012-11-03 10:29:55
【问题描述】:
c99 标准规定模运算的结果与第一个操作数的符号相同。所以-9 % 7 = -2 和9 % -7 = 2。
我在一本书中读到,c89 标准取决于实现。所以-9 % 7 可以产生-2 或<strong>5</strong>? -9 / 7 的余数是多少5?
【问题讨论】:
-
-2 X 7 + 5 = -9。我认为这是逻辑
c99 标准规定模运算的结果与第一个操作数的符号相同。所以-9 % 7 = -2 和9 % -7 = 2。
我在一本书中读到,c89 标准取决于实现。所以-9 % 7 可以产生-2 或<strong>5</strong>? -9 / 7 的余数是多少5?
【问题讨论】:
考虑两个数字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 之间。
这只是一个约定俗成的问题。
【讨论】:
x 的所有值都是等于 1 模 3”)。该分析器使用欧几里得除法,因为它具有最好的代数特性,但我不止一次抱怨 C99(实际上是处理器)易于实现但代数较少的选择。
% 运算符定义为:
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 == 5
【讨论】: