Es gibt diese Javascript-Funktion, die ich in Java neu schreiben möchte:
function normalizeHash(encondindRound2) {
if (encondindRound2 < 0) {
encondindRound2 = (encondindRound2 & 0x7fffffff) + 0x80000000;
}
return encondindRound2 % 1E6;
}
Meine Java-Anpassung:
public long normalizeHash(long encondindRound2) {
if (encondindRound2 < 0) {
encondindRound2 = (((int) encondindRound2) & 0x7fffffff) + 0x80000000;
}
return (((int) encondindRound2) % 1_000_000);
}
Wenn ich bestanden habe -1954896768, kehrt die Javascript-Version zurück 70528, während Java zurückkehrt -896768. Ich bin mir nicht sicher warum. Der Unterschied scheint innerhalb der if-Bedingung zu beginnen: in der Javascript-Funktion nach dem ifencodingRound2 = 2340070528 , während in Java : encodingRound2 = -1954896768.
Ich habe diese Antworten gemacht, um es online zu zeigen:
Javascript : https://repl.it/repls/NumbGuiltyHack
Java : https://repl.it/repls/ClumsyQualifiedProblem
BEARBEITEN : Ändern der Java-Funktion in diese
public long normalizeHash(long encondindRound2) {
if (encondindRound2 < 0) {
encondindRound2 = (encondindRound2 & 0x7fffffff) + 0x80000000;
}
return (encondindRound2 % 1_000_000);
}
scheint das Ergebnis nicht zu beeinflussen - es ist immer noch -896768
long, was aufgrund des Überlaufs zu unterschiedlichen Ergebnissen führte.
(int)Besetzung aus der returnZeile ändert nichts am Java-Ergebnis, es bleibt-896768
... + 0x80000000, konvertiert Java den Wert in ein int, da 0x80000000dies als int-Literal betrachtet wird. Ändern Sie diese Nummer in 0x80000000L.
encondindRound2in einenintim Java-Code? Da es als definiert istlong, verlieren Sie möglicherweise an Präzision, wenn Sie es auf einen engeren Typ umwandeln.