java - जावा में बाइट प्रकार और बीटवार ऑपरेटरों पर हस्ताक्षर किए हैं?



int byte (1)

ऑरेकल वेबसाइट से उद्धृत "बाइट: बाइट डेटा प्रकार एक 8-बिट के दो पूरक पूर्णांक पर हस्ताक्षर करता है। इसका न्यूनतम मूल्य -128 और अधिकतम मूल्य 127 (समावेशी) है"।

यहां, पहले दो पंक्तियां वैध हैं, लेकिन अंतिम नहीं है

            byte b = -128;
        byte b1 = 127;
        byte b2 = b>>>b1;//illegal

प्रश्न 1) वास्तव में 8-बिट पर हस्ताक्षर किए क्या है? 128 द्विआधारी प्रारूप में 1000 0000 और -128 को नकारात्मक संकेत के लिए एक अतिरिक्त बिट की आवश्यकता होगी, जहां सभी 8 बिट्स पर कब्जा कर लिया गया है, जहां यह फिट होगा।

Q2) int के लिए, एक अहस्ताक्षरित सही पारी ऑपरेटर है, लेकिन यह बाइट्स के साथ अवैध लगता है, ऐसा क्यों है। बाइट्स के मामले में अतिप्रवाह रोका नहीं जा सकता इंट के मामले में, यह काम करता है

आपकी सहायता के लिए धन्यवाद


  1. बस यह कैसा लगता है: 8 बिट्स हैं, 2 ^ 8 = 256 संभावित मूल्य वाले हैं। यह हस्ताक्षरित है, इसलिए सीमा 128 से 127 (256 मूल्यों) के बीच है। सबसे महत्वपूर्ण बिट का मूल्य -128 है

  2. जावा में, द्विपदीय संख्यात्मक पदोन्नति को संचालन जैसे b >>> b1 साथ होता है दोनों प्रकार के int को बढ़ावा दिया जाता है, और परिणाम एक int हालांकि, आप स्पष्ट रूप से byte को वापस परिणाम निकाल सकते हैं।

यहाँ कलाकारों है:

byte b2 = (byte) (b >>> b1);

जेएलएस, धारा 5.6.2 , बाइनरी सांख्यिक पदोन्नति के बारे में बात करती है:

आदिम रूपांतरण को विस्तारित करना (§5.1.2) को या तो दोनों नियमों को परिवर्तित करने के लिए लागू किया गया है जैसा कि निम्नलिखित नियमों द्वारा निर्दिष्ट किया गया है:

यदि कोई ऑपरेंड दो प्रकार की है, तो दूसरे को दो में बदल दिया जाएगा।

अन्यथा, यदि कोई ऑपरैंट प्रकार फ्लोट का होता है, तो दूसरे को फ्लोट में कनवर्ट किया जाता है।

अन्यथा, यदि कोई ऑपरेंन्ड लंबे प्रकार से होता है, तो दूसरे को लंबे समय तक परिवर्तित किया जाता है।

अन्यथा, दोनों ऑपरेंड्स को टाइप करने के लिए int को बदल दिया जाता है।

(जोर मेरा)





bit-manipulation