2009-12-29 14 views
5

यदि स्थानांतरित संख्या सकारात्मक है >>> और >> वही कार्य करें।>>> और >> ऑपरेटरों के बीच अंतर

स्थानांतरित कर दिया संख्या ऋणात्मक है, तो >>> जबकि >> आपरेशन 0.

मेरी समझ सही है साथ MSBs भरने बदलाव 1s के साथ सबसे महत्वपूर्ण बिट भरता है?

यदि नकारात्मक संख्या एमएसबी के साथ 1 पर सेट की जाती है और 2s पूरक तरीका नहीं है कि जावा ऑपरेटरों का उपयोग करता है तो बिल्कुल अलग तरीके से व्यवहार करेगा, सही?

+0

संभावित डुप्लीकेट: [>>> और >> >> के बीच अंतर] (http://stackoverflow.com/q/2811319/1529630), [जावा का बनाम >>> ऑपरेटर?] (http://stackoverflow.com/q/1034640/1529630) – Oriol

उत्तर

8

नकारात्मक संख्याओं का प्रतिनिधित्व करने के तरीके को 2 का पूरक कहा जाता है। यह प्रदर्शित करने के लिए कि यह कैसे काम करता है, उदाहरण के रूप में -12 ले लो। 12, द्विआधारी में, 00001100 है (मान लें कि पूर्णांक 8 बिट्स हैं हालांकि वास्तविकता में वे बहुत अधिक हैं)। प्रत्येक बिट को आसानी से बदलकर 2 का पूरक लें, और आपको 11110011 मिलें। फिर, 11110100 प्राप्त करने के लिए बस 1 जोड़ें। ध्यान दें कि यदि आप एक ही चरण को फिर से लागू करते हैं, तो आपको सकारात्मक 12 वापस मिलते हैं।

>>> शून्य में बदलाव चाहे कोई फर्क नहीं पड़ता, इसलिए 12 >>> 1 आपको 00000110 देना चाहिए, जो 6 है, और (-12) >>> 1 आपको 01111010 देना चाहिए, जो 122 है। यदि आप वास्तव में जावा में इसे आज़माएं, आपको बहुत बड़ी संख्या मिल जाएगी क्योंकि जावा इट्स वास्तव में 8 बिट्स से काफी बड़े हैं।

>> >> उच्चतम बिट के समान थोड़ा बदलाव करता है, ताकि सकारात्मक संख्या सकारात्मक रहे और नकारात्मक संख्या नकारात्मक रहें। 12 >> 1 00000110 (अभी भी 6) और (-12) >> 1 11111010 होगा जो नकारात्मक 6 है।

1

बस विपरीत, >>> जबकि >> लोगों के साथ भरता है शून्य से भर जाता है, तो हो बिट है 1.

+0

क्या आप समझा सकते हैं कि क्यों '7 >>> 32 = 7'। मैंने सर्कुलर बदलावों के बारे में सुना, लेकिन मैंने सोचा कि केवल '>>' पर लागू है। 32 बदलावों के बाद शून्य के बराबर '7 >>> 32' नहीं होगा? –

+0

@IanLimarta: यदि बाएं हाथ की ओर एक int है, तो शिफ्ट राशि को 32 32 कम कर दिया जाता है। आपके मामले में, इसका मतलब है कि शिफ्ट राशि 0 है, जो प्रभावी रूप से नो-ऑप है। [जेएलएस] देखें (https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.19) –

2

Definition of the >>> operator in the Java Language Specification:

n>>>s का मूल्य n सही-स्थानांतरित रों है शून्य-विस्तार के साथ बिट स्थिति। यदि एन सकारात्मक है, तो परिणाम n>>s जैसा ही है; यदि एन ऋणात्मक है, तो परिणाम (n>>s)+(2<<~s) अभिव्यक्ति के बराबर है यदि बाएं हाथ के ऑपरेंड का प्रकार int है, और (n>>s)+(2L<<~s अभिव्यक्ति के परिणामस्वरूप) यदि बाएं हाथ के ऑपरेंड का प्रकार long है।

संबंधित मुद्दे