मैं जावा में एक स्केन हैश फ़ंक्शन को कार्यान्वित कर रहा हूं, और मुझे एक ऐसे हिस्से में समस्या है जहां कुछ परिवर्धन जहां मॉड्यूल 2^64 है। जैसा कि हम जानते हैं, जावा में लंबे समय तक अधिकतम मूल्य = 2^63-1 है। तो मेरी समस्या यह है कि इस मॉड्यूल ऑपरेशन को कैसे कार्यान्वित करें। (स्केन में सभी ऑपरेशन 64 बिट शब्दों पर हैं।)जावा में लंबे समय तक mod2^64 कैसे करें?
उत्तर
long
जावा में 64-बिट है इसलिए सभी ऑपरेशन पहले से ही 2^64 हैं। ऐसा करने के लिए आपको कुछ भी अतिरिक्त करने की ज़रूरत नहीं है।
क्या समस्या है कि आप नहीं जानते कि हस्ताक्षरित मूल्यों को कैसे संभालना है?
क्या यह आप चाहते हैं या यह कुछ है जिसे आप टालने का प्रयास कर रहे हैं?
धन्यवाद, यह सहायक था। यह वही है जो मैं चाहता हूं। मैं केवल अंत में बिट्स पर काम कर रहा हूं, इसलिए मुझे थोड़ा सा संकेत नहीं है। –
आपके पास एकमात्र समस्या है संचालन के लिए जहां हस्ताक्षर महत्वपूर्ण हैं। जैसे Long.toString (लंबा) एक संकेत मुद्रित करेगा। हालांकि, कई ऑपरेशन बिट्स पर काम करते हैं क्योंकि आप हस्ताक्षरित या हस्ताक्षरित होने की अपेक्षा करेंगे। –
सभी परिचालनों के अंत में, मैं सभी 64 बिट शब्दों को 512 बिट्स के बाइट [] में जोड़ दूंगा, और फिर मैं हेक्स या स्ट्रिंग के रूप में सभी की व्याख्या करूँगा, मुझे अभी तक पता नहीं है। –
BigInteger
ऐसा करने का एक तरीका है।
पीटर के उत्तर के अलावा, मैं महान Guava लाइब्रेरी पर एक नज़र डालने का सुझाव देना चाहता हूं। इसमें एक वर्ग UnsignedLongs है जो लंबे समय तक काम करने के लिए काम करने के लिए कई उपयोगिता कार्यों को प्रदान करता है जो उन्हें बिना हस्ताक्षर किए गए हैं। यह आपके लिए सहायक हो सकता है।
यहां 'बिना हस्ताक्षर किए गए' लेखक का लेखक: पीटर का जवाब अधिकतर हस्ताक्षर किए गए लम्बे समय तक भी सटीक है। विशेष रूप से, +, -, और * सभी सही हैं, भले ही आप लंबे मूल्यों का इलाज करते हों हस्ताक्षर किए गए। इसके अतिरिक्त, आपको 'UnsignedLong' wrapper class' का उपयोग करने में मदद मिल सकती है, जिसे आप 'बिगइंटर' जैसे उपयोग कर सकते हैं लेकिन मोड 2^64 काम करता है। –
यदि आपको सुपर फास्ट होने की आवश्यकता नहीं है, तो आप ['BigInteger'] (http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html का उपयोग कर सकते हैं) – dasblinkenlight