यह जावास्क्रिप्ट फ़ंक्शन है जिसे मैं जावा में फिर से लिखने की कोशिश कर रहा हूं:
function normalizeHash(encondindRound2) {
if (encondindRound2 < 0) {
encondindRound2 = (encondindRound2 & 0x7fffffff) + 0x80000000;
}
return encondindRound2 % 1E6;
}
मेरा जावा अनुकूलन:
public long normalizeHash(long encondindRound2) {
if (encondindRound2 < 0) {
encondindRound2 = (((int) encondindRound2) & 0x7fffffff) + 0x80000000;
}
return (((int) encondindRound2) % 1_000_000);
}
जब मैं पास होता हूं -1954896768, तो जावास्क्रिप्ट संस्करण वापस आ जाता है 70528, जबकि जावा वापस आ जाता है -896768। मुझे यकीन नहीं है कि क्यों। अंतर यह है कि अगर हालत के अंदर शुरू होता है encodingRound2 = 2340070528: जावा के बाद जावास्क्रिप्ट फ़ंक्शन में , जबकि encodingRound2 = -1954896768:।
मैंने इन्हें ऑनलाइन दिखाने के लिए ये उत्तर दिए:
जावास्क्रिप्ट : https://repl.it/repls/NumbGuiltyHack
जावा : https://repl.it/repls/ClumsyQualifiedProblem
संपादित करें : जावा फ़ंक्शन को इसमें बदलना
public long normalizeHash(long encondindRound2) {
if (encondindRound2 < 0) {
encondindRound2 = (encondindRound2 & 0x7fffffff) + 0x80000000;
}
return (encondindRound2 % 1_000_000);
}
परिणाम को प्रभावित नहीं करता है - यह अभी भी है -896768
longअतिप्रवाह के कारण जावा के अलग-अलग परिणाम दिए गए थे।
(int)कास्ट को returnलाइन से हटाने से जावा रिजल्ट नहीं बदलता है, यह बना रहता है-896768
... + 0x80000000, तो जावा वैल्यू को एक इंट में बदल देता है, क्योंकि 0x80000000इसे एक इंटर्नल माना जाता है। उस नंबर को बदल दें 0x80000000L।
encondindRound2एक करने के लिएintजावा कोड में? चूंकि यह एक के रूप में परिभाषित हैlong, आप संभावित रूप से सटीक खो सकते हैं यदि आप इसे एक संकीर्ण प्रकार में डालते हैं।