次の Java プログラムでは、この行が何をするのか理解できません。
wert = (wert * mult + inkr) & 0x7FFFFFFFL;
ビット単位の演算子が条件で何をするかは理解していますが、主に 2 つの数値があります (16 進数は 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);
}