数字的模数总是在0和它的数字1之间返回?

时间:2014-01-19 01:15:53

标签: java compiler-construction modulus

我需要做一个数字的MOD,它是long datatype和1965年。

像这样 -

number % 1965

上述模数结果是否始终在01964之内?

或者在某些情况下它不会在0到1664之间返回任何数字?

我使用Java作为编程语言,我将在Ubuntu机器上运行我的程序。

最初我认为它是一个数学问题,但它主要取决于编译器和语言......所以有点困惑它总会返回0到1664之间的数字或者有一些例外情况?

这就是我的方法 -

private static int getPartitionNumber() {
    return (int) (number % 1965);
}

更新

我忘记提到的一件事是,number始终是正数。任何负数我在程序开始时抛出IllegalArgumentException。

1 个答案:

答案 0 :(得分:1)

不,java的模数实现将返回值(-n, n)范围x % n的值。即如果您有一个负数作为左操作数,则结果将为负数。要解决这个问题,请尝试以下方法:

((x % n) + n) % n;

将返回[0,n)

范围内的值

编辑(反映有问题的更新)

如果左操作数中为正数,则只需x % n即可生成[0,n) x >= 0范围内的数字。