এই জাভাস্ক্রিপ্ট ফাংশনটি রয়েছে যা আমি জাভাতে আবার লেখার চেষ্টা করছি:
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, আপনি এটি সংকীর্ণ ধরণের কাছে ফেলে দিলে আপনি সম্ভবত যথাযথতা হারাবেন।