Java'da yeniden yazmaya çalıştığım bu Javascript işlevi var:
function normalizeHash(encondindRound2) {
if (encondindRound2 < 0) {
encondindRound2 = (encondindRound2 & 0x7fffffff) + 0x80000000;
}
return encondindRound2 % 1E6;
}
Java uyarlamam:
public long normalizeHash(long encondindRound2) {
if (encondindRound2 < 0) {
encondindRound2 = (((int) encondindRound2) & 0x7fffffff) + 0x80000000;
}
return (((int) encondindRound2) % 1_000_000);
}
Ben geçtikten sonra -1954896768, JavaScript versiyonu döner 70528Java getiriler ise -896768. Neden olduğundan emin değilim. Fark if koşulu içinde başlıyor gibi görünüyor: encodingRound2 = 2340070528Java , if ise Javascript işlevinden sonra encodingRound2 = -1954896768.
Çevrimiçi olarak göstermek için bu kopyaları yaptım:
Javascript : https://repl.it/repls/NumbGuiltyHack
Java : https://repl.it/repls/ClumsyQualifiedProblem
EDIT : Java işlevini bu şekilde değiştirme
public long normalizeHash(long encondindRound2) {
if (encondindRound2 < 0) {
encondindRound2 = (encondindRound2 & 0x7fffffff) + 0x80000000;
}
return (encondindRound2 % 1_000_000);
}
sonucu etkilemiyor gibi görünüyor - hala -896768
longtaşma nedeniyle farklı sonuçlar verdi kod başka bir parça ile bu sorunu vardı .
(int)gelen döküm returnJava sonucunu değiştirmez hattı, bu kalır-896768
... + 0x80000000, Java değeri int değerine dönüştürür, çünkü 0x80000000int değişmezidir. Bu sayıyı olarak değiştirin 0x80000000L.
encondindRound2bir etmekintJava kodunda? Bir olarak tanımlandığındanlong, daha dar bir türe yayınlarsanız hassasiyeti kaybedersiniz.