我需要对一个长数据类型
与 1965 的数字进行 MOD。
类似这样的东西 -
number % 1965
上述模数结果是否始终在 0
和 1964
之间?
或者在某些情况下它不会返回 0 到 1664 之间的任何数字?
我使用 Java 作为编程语言,我将在 Ubuntu 机器上运行我的程序。
最初我以为这是一个数学问题,但它主要取决于编译器和语言...有点困惑,它总是返回 0 到 1664 之间的数字,或者有一些异常(exception)情况?
这就是我的方法 -
private static int getPartitionNumber() {
return (int) (number % 1965);
}
更新:
我忘记提及的一件事是,这里的 number
将始终为正数。任何负数我都会在程序开始时抛出 IllegalArgumentException。
最佳答案
不,java 的模数实现将返回 (-n, n)
范围内的值 x % n
。 IE。如果左操作数为负数,则结果将为负数。要解决此问题,请尝试以下操作:
((x % n) + n) % n;
这将返回 [0,n)
范围内的值
编辑(以反射(reflect)有问题的更新)
如果左操作数为正数,则只需 x % n
即可生成 [0,n)
范围内的数字,其中 x > = 0
。
关于java - 数字的模数总是会返回 0 和它的数字-1 之间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21212043/