如何-9%7可以是-2还是5?

时间:2014-01-12 12:35:42

标签: c modulo

根据我的理解,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?

1 个答案:

答案 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)。

%是余数运算符。