मैंने आईटी का अध्ययन नहीं किया, और केवल हाल ही में bit shifts और two's complement के लिए एक आवेदन आया। तो, क्या आप कृपया अपने स्पष्टीकरण में सरल अंग्रेजी का उपयोग कर सकते हैं और मान सकते हैं कि मुझे आईपी पते, बिट ऑपरेशंस और जावा डेटाटाइप के बारे में कुछ भी पता नहीं है?जावा का बिट शिफ्ट ऑपरेटर हुड के नीचे कैसे काम करता है?
long m = (-1) << (byte) 16;
अब, यह आईपी सबनेट मास्किंग के लिए है:
आज, मैं कोड का निम्न भाग (संक्षिप्त) पाया। मुझे पता है कि मुझे 8 बिट्स (यानी 4 बाइट्स) के 4 ब्लॉक के साथ शुरू करने की आवश्यकता है, और सभी बिट्स को "चालू" होना चाहिए: 11111111 11111111 1111111 1111111
अगला, शून्य से दाईं ओर शून्य स्थानांतरित हो जाते हैं, इस मामले में 16 बिट्स के लायक होते हैं; इसलिए हमें 11111111 11111111 00000000 0000000
, मास्क मिलता है।
16
इस काम करने के लिए प्रकारbyte
का होना जरूरी है:लेकिन मैं ऐसा कुछ प्रश्न हैं?
- परिणाम
long
का प्रकार है। जब उपरोक्त अभिव्यक्ति चलता है,-1
रूपांतरित हो जाता है - प्रभावी ढंग से - 4x8bit ब्लॉक। जावा कैसे जानता है कि इसे 32 पदों/बिट्स (एक आईपी पता 'लंबाई) की जरूरत है, और नहीं, कहें, 16, या 8, दो पूरक के आवेदन करते समय? (मुझे लगता है किlong
डेटाटाइप के साथ क्या करना है?) - दो के पूरक
-1
पर क्यों शुरू होते हैं? (Google आपको-0b1
देता है यदि आप इसे पूछते हैं कि-1
बाइनरी में है। मैंने पहले सोचा था कि यह ओवरफ़्लो के साथ हो सकता है, लेकिन ऐसा नहीं है, है ...?) - वास्तव में, कंपाइलर कनवर्ट करने वाला डेटाटाइप यह कोड चलाने के दौरान, यह सब काम करने के लिए?
अद्यतन:16
एक विधि द्वारा रनटाइम पर उत्पादन किया जाता है; मैंने यहां एक उदाहरण के रूप में एक स्थिर रखा है। मसा में शायद एक बुरा विचार ...
एक 32 बिट मान एक रजिस्टर में फिट होगा, और बिट्सफ़िफ्टिंग ऑपरेशन आमतौर पर प्रोसेसर द्वारा किया जाएगा, कुछ ऐसा जो असेंबली में 'shl AX, 16' जैसा दिखता है। उस स्तर पर वास्तव में डेटा प्रकार नहीं हैं। आपको अभी 8, 16, 32 या 64 बिट्स के ब्लॉक मिल गए हैं। – GolezTrol
32 बिट्स के साथ लगभग निश्चित रूप से अधिक करना है कि वास्तविक int 32 बिट्स चौड़ा है, जो कि आईपी की लंबाई है (जहां तक मुझे याद है, जावा में बिट्सफिफ्ट करते समय, सबकुछ स्वचालित रूप से int में प्रचारित होता है) – Luke
आपके चार में से कोई भी नहीं प्रश्नों के साथ कुछ भी करना है कि कैसे बदलाव हुड के नीचे काम करता है, इसलिए आपको शायद अधिक वर्णनात्मक शीर्षक का उपयोग करना चाहिए। – harold