बिट शिफ्ट क्या है?
बिट शिफ्ट किसी पूर्णांक के बाइनरी अंकों को चुनी हुई संख्या के बराबर स्थानों तक बाएँ या दाएँ खिसका देता है। प्रोग्रामिंग, लो-लेवल ऑप्टिमाइज़ेशन, ग्राफ़िक्स, हैशिंग और एम्बेडेड सिस्टम में शिफ्टिंग एक बुनियादी ऑपरेशन है। लेफ्ट शिफ्ट (n << k) में बिट्स सबसे महत्वपूर्ण (मोस्ट-सिग्निफ़िकेंट) सिरे की ओर खिसकते हैं और खाली जगह शून्य से भर जाती है, जबकि राइट शिफ्ट (n >> k) में बिट्स सबसे कम महत्वपूर्ण (लीस्ट-सिग्निफ़िकेंट) सिरे की ओर खिसकते हैं।
इस कैलकुलेटर का उपयोग कैसे करें
पूर्णांक n दर्ज करें, शिफ्ट की मात्रा k (बिट्स में) डालें और दिशा चुनें। कैलकुलेटर परिणामी दशमलव मान दिखा देगा। यह टूल 64-बिट साइन्ड पूर्णांक अंकगणित का उपयोग करता है, जो अधिकांश प्रोग्रामिंग भाषाओं के व्यवहार से मेल खाता है।
फ़ॉर्मूला समझें
एक स्थान की हर लेफ्ट शिफ्ट संख्या को दोगुना कर देती है, इसलिए k स्थानों तक बाएँ खिसकाने पर संख्या 2k से गुणा हो जाती है: $$\text{Result} = \text{Number (n)} \ll \text{Shift (k)} = n \times 2^{k}$$। एक स्थान की हर राइट शिफ्ट संख्या को आधा कर देती है (दशमलव हिस्सा हटाकर), इसलिए k स्थानों की राइट शिफ्ट 2k से पूर्णांक भाग के बराबर होती है: $$\text{Result} = \text{Number (n)} \gg \text{Shift (k)} = \left\lfloor \frac{n}{2^{k}} \right\rfloor$$। यही वजह है कि हार्डवेयर पर शिफ्ट, गुणा या भाग की तुलना में कहीं ज़्यादा सस्ती (तेज़) होती हैं।
हल किया हुआ उदाहरण
मान लीजिए n = 16 है और इसे k = 2 से बाएँ खिसकाना है। बाइनरी में 16 का मान 10000 है। दो बार बाएँ खिसकाने पर अंत में दो शून्य जुड़ जाते हैं: 1000000, यानी 64। गणितीय रूप से, $$16 \times 2^{2} = 16 \times 4 = 64$$। उलटा करें तो \(64 \gg 2 = \left\lfloor 64 / 4 \right\rfloor = 16\), जो मूल मान लौटा देता है।
दो की शक्तियों संदर्भ तालिका
बाईं ओर \(k\) द्वारा स्थानांतरण एक संख्या को \(2^k\) से गुणा करता है; दाईं ओर \(k\) द्वारा स्थानांतरण को \(2^k\) से विभाजित करता है (पूर्णांकों के लिए शेषफल को त्यागते हुए)। दिए गए स्थानांतरण राशि के लिए तुरंत गुणक या भाजक को पढ़ने के लिए इस तालिका का उपयोग करें।
| स्थानांतरण \(k\) | \(2^k\) (दशमलव) | \(\ll k\) / \(\gg k\) का अर्थ |
|---|---|---|
| 0 | 1 | कोई परिवर्तन नहीं |
| 1 | 2 | \(\times 2\) / \(\div 2\) |
| 2 | 4 | \(\times 4\) / \(\div 4\) |
| 3 | 8 | \(\times 8\) / \(\div 8\) |
| 4 | 16 | \(\times 16\) |
| 5 | 32 | \(\times 32\) |
| 6 | 64 | \(\times 64\) |
| 7 | 128 | \(\times 128\) |
| 8 | 256 | \(\times 256\) (1 बाइट) |
| 9 | 512 | \(\times 512\) |
| 10 | 1,024 | \(\times 1024\) (1 किबिबाइट) |
| 11 | 2,048 | \(\times 2048\) |
| 12 | 4,096 | \(\times 4096\) |
| 13 | 8,192 | \(\times 8192\) |
| 14 | 16,384 | \(\times 16384\) |
| 15 | 32,768 | \(\times 32768\) |
| 16 | 65,536 | \(\times 65536\) (2 बाइट) |
| 17 | 131,072 | |
| 18 | 262,144 | |
| 19 | 524,288 | |
| 20 | 1,048,576 | \(\times\) 1 मेबिबाइट |
| 32 | 4,294,967,296 | 32-बिट सीमा |
| 63 | 9,223,372,036,854,775,808 | 64-बिट हस्ताक्षरित पूर्णांक का शीर्ष बिट |
अक्सर पूछे जाने वाले सवाल
क्या लेफ्ट शिफ्ट से कभी डेटा खो सकता है? हाँ — पूर्णांक की चौड़ाई से बाहर खिसके बिट्स हटा दिए जाते हैं (ओवरफ़्लो)। 64 बिट के भीतर यह कैलकुलेटर मान को सुरक्षित रखता है।
राइट शिफ्ट में ऋणात्मक संख्याओं के साथ क्या होता है? यह कैलकुलेटर अंकगणितीय (साइन्ड) राइट शिफ्ट का उपयोग करता है, इसलिए साइन बिट सुरक्षित रहता है और ऋणात्मक संख्याएँ ऋणात्मक ही रहती हैं।
गुणा या भाग के बजाय शिफ्ट क्यों इस्तेमाल करें? अधिकांश CPU पर बिट शिफ्ट सिंगल-साइकल ऑपरेशन होते हैं, जिससे ये दो की घातों से गुणा या भाग करने का बेहद तेज़ तरीका बन जाते हैं।