我需要做一个数字的MOD,它是long datatype
和1965年。
像这样 -
number % 1965
上述模数结果是否始终在0
和1964
之内?
或者在某些情况下它不会在0到1664之间返回任何数字?
我使用Java作为编程语言,我将在Ubuntu机器上运行我的程序。
最初我认为它是一个数学问题,但它主要取决于编译器和语言......所以有点困惑它总会返回0到1664之间的数字或者有一些例外情况?
这就是我的方法 -
private static int getPartitionNumber() {
return (int) (number % 1965);
}
更新
我忘记提到的一件事是,number
始终是正数。任何负数我在程序开始时抛出IllegalArgumentException。
答案 0 :(得分:1)
不,java的模数实现将返回值(-n, n)
范围x % n
的值。即如果您有一个负数作为左操作数,则结果将为负数。要解决这个问题,请尝试以下方法:
((x % n) + n) % n;
将返回[0,n)
编辑(反映有问题的更新)
如果左操作数中为正数,则只需x % n
即可生成[0,n)
x >= 0
范围内的数字。