【发布时间】:2021-02-14 11:27:41
【问题描述】:
在 Java 中,
4 % -8
输出 4 而不是
-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/-8 是 0 和 0 * -8 == 0,余数 4 % -8 必须是 4。
【讨论】: