एक Arithmetic right shift जब स्थानांतरण एक signed number संकेत सुरक्षित करेगा:
11111111 (-1) will stay 11111111 (-1)
इसके विपरीत, एक Logical right shift संकेत को सुरक्षित नहीं करेगा:
11111111 (-1) will become 01111111 (127)
आपका कोड स्पष्ट रूप से एक अंकगणितीय पारी करता है, तो साइन बिट (MSB) दोहराया जाता है। ऑपरेटर (>>) आपके द्वारा उपयोग किए जा रहे प्लेटफ़ॉर्म के कार्यान्वयन विवरण पर निर्भर करता है। ज्यादातर मामलों में, यह एक अंकगणितीय शिफ्ट है।
यह भी ध्यान दें कि 11111111
में प्रतिनिधित्व के आधार पर दो अलग-अलग अर्थ हो सकते हैं। यह उन तरीकों को भी प्रभावित करता है जिन्हें वे स्थानांतरित कर दिए जाएंगे।
- अहस्ताक्षरित हैं, तो
11111111
सही करने के लिए यह स्थानांतरण संकेत को सुरक्षित नहीं करेगा क्योंकि MSB एक संकेत सा नहीं है 255 का प्रतिनिधित्व करता है।
- हस्ताक्षर किए जाने पर,
11111111
प्रतिनिधित्व करता है -1। अंकगणित रूप से इसे दाईं ओर स्थानांतरित करने से संकेत सुरक्षित रहेगा।
स्रोत
2009-06-26 01:42:02
php "echo -1 >> 1;" में भी सच है – merkuro
पायथन में भी, और जैसा कि उत्तर कहते हैं, यह संकेत को संरक्षित करने के लिए नकारात्मक संख्याओं को 1 से भरने के लिए समझ में आता है। –