根据我的理解,Modulo定义为:
Floor(a/b)*b + a%b = a
'a'可以是+9或-9 这样:
Floor(9/-7)*-7 + a%b = 9 gives a%b = 2
or
Floor(-9/7)*7 + a%b = -9 gives a%b = -2
怎么样5?
答案 0 :(得分:2)
根据评论,这是正在发生的事情: 地板(-9/7)可以向上或向下修圆。因此:-1.285 ..可以舍入为-1或-2。如果它舍入到-1,那么%b是-2但是如果你舍入到-2,那么%b = 5因为Floor(-9/7)* 7 + a%b = -9;得到-2 * 7 + a%b = -9;给出5。
换句话说,必须考虑舍入-1.285 ..的最低值的方向,因为不同的硬件架构有些不同,有些朝向顶部(-1)而另一些朝向底部(-2更负面) )。
C89标准规定如果任一操作数为负数。结果 分裂可以向上或向下四舍五入。
在C99。另一方面。分裂的结果总是如此 截断为零(所以 - 9/7的值为-I)和i的值 %j与i具有相同的符号(因此-9 96 7的值为-2)。
%是余数运算符。