问题描述
在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/-8
是0
,而0 * -8 == 0
是,其余4 % -8
具有变成4。