JLS कहता है कि

शिफ्ट एक्सप्रेशन का प्रकार बाएं हाथ के ऑपरेंड का प्रचारित प्रकार है।

यदि बाएं हाथ के ऑपरेंड का प्रचारित प्रकार int है, तो दाएं हाथ के ऑपरेंड के केवल पांच निम्नतम-क्रम बिट्स का उपयोग शिफ्ट दूरी के रूप में किया जाता है। यह ऐसा है जैसे कि दाहिने हाथ के ऑपरेंड को थोड़ा तार्किक और ऑपरेटर के अधीन किया गया था और (§15.22.1) मास्क मान 0x1f (0b11111) के साथ। वास्तव में उपयोग की जाने वाली शिफ्ट दूरी इसलिए हमेशा 0 से 31 की सीमा में होती है।

यदि बाएं हाथ के ऑपरेंड का प्रचारित प्रकार लंबा है, तो दाएं हाथ के ऑपरेंड के केवल छह निम्नतम-क्रम बिट्स का उपयोग शिफ्ट दूरी के रूप में किया जाता है। यह ऐसा है जैसे कि दाहिने हाथ के ऑपरेंड को थोड़ा तार्किक और ऑपरेटर के अधीन किया गया था और (§15.22.1) मास्क मान 0x3f (0b111111) के साथ। वास्तव में उपयोग की जाने वाली शिफ्ट की दूरी इसलिए हमेशा 0 से 63 की सीमा में होती है।

तो अगर मैं स्पष्ट रूप से (byte)100<<100 और (short)100<<100 जैसे कास्ट ऑपरेटर का उपयोग करके एक बाइट और एक छोटा ऑपरेंड बनाता हूं, तो सही ऑपरेंड के उपयोग योग्य बिट्स क्या होंगे?

संपादित करें: क्या एक ऑपरेंड एक संख्यात्मक प्रचार (यूनरी/बाइनरी) से गुजरता है यदि इसे पहले से ही एक कास्टिंग ऑपरेटर का उपयोग करके एक अलग (छोटे) प्रकार में परिवर्तित कर दिया गया है? यदि ऐसा है, तो आप बाइट वैरिएबल b1 = (byte)(b2 + b3) वाले एक्सप्रेशन की व्याख्या कैसे करेंगे क्योंकि कास्ट रूपांतरण के बाद, बाइट परिणाम संभवतः संख्यात्मक प्रचार के अनुसार इंट में परिवर्तित हो जाएगा?

0
user12208242 18 अगस्त 2020, 22:05

1 उत्तर

अधिकतम प्रयोग करने योग्य शिफ्ट दूरी के बिट्स की संख्या log2n द्वारा दी गई है, जहां n बाएं हाथ के प्रकार के मूल्यों का प्रतिनिधित्व करने के लिए उपयोग की जाने वाली बिट्स की संख्या है।

byte में 8 बिट हैं। log28 3 है। इसलिए 0-7 की सीमा में शिफ्ट मान देते हुए केवल सबसे सही 3 बिट्स का उपयोग किया जाता है।

short में 16 बिट हैं। log216 4 है। इसलिए 0-15 रेंज में शिफ्ट वैल्यू देते हुए केवल सबसे सही 4 बिट्स का उपयोग किया जाता है।

1
Bohemian 18 अगस्त 2020, 22:27