在以下 Java 程序中,我无法理解这一行的作用:
wert = (wert * mult + inkr) & 0x7FFFFFFFL;
我了解按位运算符在条件下的作用,但主要有两个数字(十六进制是 Java 中整数的最大值)。我不明白,为什么& 0x7FFFFFFFL; 甚至在这一行也有一定的影响力。在我看来,变量wert应该只是具有(wert * mult + inkr)的值,因为它是真的。虽然我发现& 0x7FFFFFFFL; 显然只有当(wert * mult + inkr)为负时才会产生一些影响。为什么以及在这一行中究竟发生了什么?
注释:这应该是一个模拟抽奖的程序。我知道程序中的错误,就在注释所在的位置。但这与我现在无关。如果有人能告诉我以下不是真正特定于 Java 的问题,那就太好了:变量mult和inkr有什么意义?
public static void main(String args[]) {
int kugeln = 49;
int ziehen = 6;
int mult = 1103515245;
int inkr = 12345;
long wert = System.currentTimeMillis();
int zahlen[] = new int[kugeln];
for(int i = 0; i < kugeln; i++) {
zahlen[i] = i + 1;
wert = (wert * mult + inkr) & 0x7FFFFFFFL;
}
for(int i = 0; i < ziehen; i++) {
int index = (int)(wert / 10) % (49 - i);
int temp = zahlen[49 - i]; // Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 49
zahlen[49 - i] = zahlen[index];
zahlen[index] = temp;
wert = (wert * mult + inkr) & 0x7FFFFFFFL;
}
int superzahl = (int)(wert / 10) % 10;
for(int i = 0; i < ziehen; i++) {
System.out.println(zahlen[49 - i]);
}
System.out.println(superzahl);
}