为什么4%-8等于4?

问题描述

在Java中,

4 % -8

给出4作为输出而不是

-4

是我所期望的。

解决方法

这在Java language specification section 15.17.3中有详细介绍。

在二进制数值提升(第5.6节)之后为整数的操作数的余数运算会产生结果值,使得(a / b)* b +(a%b)等于a。

即使在特殊情况下,该标识仍然成立,即被除数是其类型的最大可能负整数,除数为-1(余数为0)。

根据此规则,余数运算的结果仅在股息为负时才可以为负,而在股息为正时才可以为正。而且,结果的大小始终小于除数的大小。

例如,-4 % 8确实是-4,但是由于4/-80,而0 * -8 == 0是,其余4 % -8具有变成4。