java - 数字的模数总是会返回 0 和它的数字-1 之间吗?

标签 java compiler-construction modulus

我需要对一个长数据类型与 1965 的数字进行 MOD。

类似这样的东西 -

number % 1965

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

或者在某些情况下它不会返回 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/

相关文章:

go - 如何在 Go 中测试一个 float 是否为整数?

php - 使用模数排序

java - 5 秒后加载新 Activity

r - 在 R 中将源代码 (mypackage.tar.gz) 转换为窗口安装 (mypackage.zip)

Java - 自定义整数除法函数

parsing - 生产编译器是否使用解析器生成器?

java - GCJ 还在开发中吗?

java - 有关 Java 无法从同一目录中的 .class 中找到符号的更多信息

java - 如何在java中打印txt文件中的异常

java - 在不使用模数、除法或乘法的情况下查找质数