Java如何用负数进行模数计算?

2022-08-31 10:27:06

我是否做错了模量?因为在Java中计算为,但我想得到.-13 % 64-1351


答案 1

负数模的两个定义都在使用中 - 一些语言使用一个定义,而另一些语言使用另一个定义。

如果你想得到负输入的负数,那么你可以使用这个:

int r = x % n;
if (r > 0 && x < 0)
{
    r -= n;
}

同样,如果您使用的语言在负输入上返回负数,并且您更喜欢正数:

int r = x % n;
if (r < 0)
{
    r += n;
}

答案 2

由于“数学上”两者都是正确的:

-13 % 64 = -13 (on modulus 64)  
-13 % 64 = 51 (on modulus 64)

其中一个选项必须由Java语言开发人员选择,他们选择了:

结果的符号等于股息的符号。

在Java规范中说:

https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17.3