यहाँ अच्छे उत्तर हैं, लेकिन मुझे बिटवाइज़ ऑपरेशंस का कोई प्रदर्शन नहीं दिखता है। विज़र की तरह (वर्तमान में स्वीकृत उत्तर) कहता है, जावा डिफ़ॉल्ट रूप से पूर्णांक पर हस्ताक्षर करता है (जावा 8 में पूर्णांक नहीं दिया गया है, लेकिन मैंने कभी भी इसका उपयोग नहीं किया है)। आगे की हलचल के बिना, चलो यह करते हैं ...
RFC 868 उदाहरण
यदि आपको IO को अहस्ताक्षरित पूर्णांक लिखने की आवश्यकता है तो क्या होगा? व्यावहारिक उदाहरण वह है जब आप RFC 868 के अनुसार समय का उत्पादन करना चाहते हैं । इसके लिए एक 32-बिट, बिग-एंडियन, अहस्ताक्षरित पूर्णांक की आवश्यकता होती है जो 12:00 AM 1 जनवरी, 1900 के बाद से सेकंड की संख्या को एन्कोड करता है। आप इसे कैसे एनकोड करेंगे?
इस तरह अपना स्वयं का अहस्ताक्षरित 32-बिट पूर्णांक बनाएं:
4 बाइट्स (32 बिट) की बाइट सरणी घोषित करें
Byte my32BitUnsignedInteger[] = new Byte[4] // represents the time (s)
यह सरणी को इनिशियलाइज़ करता है, देखते हैं कि क्या बाइट एरेज़ जावा में शून्य से शुरू होती है? । अब आपको प्रत्येक बाइट को बड़े-एंडियन ऑर्डर में जानकारी के साथ भरना होगा (या यदि आप कहर बरपाना चाहते हैं तो थोड़ा-सा एंडियन)। यह मानते हुए कि आपके पास एक लंबा समय है (लंबे पूर्णांक जावा में 64 बिट लंबे हैं) कहा जाता है secondsSince1900
(जो केवल पहले 32 बिट्स का उपयोग करता है, और आपने इस तथ्य को संभाला है कि दिनांक 12:00 पूर्वाह्न 1 जनवरी, 1970), तब आप इसे से बिट्स निकालने के लिए तार्किक और का उपयोग कर सकते हैं और उन बिट्स को पदों (अंकों) में शिफ्ट कर सकते हैं जिन्हें बाइट में ले जाने पर और बड़े-एंडियन ऑर्डर में नजरअंदाज नहीं किया जाएगा।
my32BitUnsignedInteger[0] = (byte) ((secondsSince1900 & 0x00000000FF000000L) >> 24); // first byte of array contains highest significant bits, then shift these extracted FF bits to first two positions in preparation for coersion to Byte (which only adopts the first 8 bits)
my32BitUnsignedInteger[1] = (byte) ((secondsSince1900 & 0x0000000000FF0000L) >> 16);
my32BitUnsignedInteger[2] = (byte) ((secondsSince1900 & 0x000000000000FF00L) >> 8);
my32BitUnsignedInteger[3] = (byte) ((secondsSince1900 & 0x00000000000000FFL); // no shift needed
हमारा my32BitUnsignedInteger
अब एक अहस्ताक्षरित 32-बिट, बिग-एंडियन पूर्णांक के बराबर है जो RCF 868 मानक का पालन करता है। हां, लंबे डेटाटाइप पर हस्ताक्षर किए गए हैं, लेकिन हमने उस तथ्य को नजरअंदाज कर दिया है, क्योंकि हमने माना कि सेकंडसिंस 1900 ने केवल निचले 32 बिट्स का उपयोग किया है)। एक बाइट में लंबे समय तक बैठने के कारण, 2 ^ 7 (हेक्स में पहले दो अंक) से अधिक सभी बिट्स को नजरअंदाज कर दिया जाएगा।
स्रोत संदर्भित: जावा नेटवर्क प्रोग्रामिंग, 4 संस्करण।