बिटवाइज शिफ्ट ऑपरेटर राइट-शिफ्ट ऑपरेटर (>>) हैं, जो शिफ्ट_एक्सप्रेशन के बिट्स को दाईं ओर ले जाते हैं, और लेफ्ट-शिफ्ट ऑपरेटर (<<), जो बाईं ओर शिफ्ट_एक्सप्रेशन के बिट्स।
लेफ्ट-शिफ्ट ऑपरेटर शिफ्ट-एक्सप्रेशन में बिट्स को एडिटिव-एक्सप्रेशन द्वारा निर्दिष्ट पदों की संख्या से बाईं ओर स्थानांतरित करने का कारण बनता है। शिफ्ट ऑपरेशन द्वारा खाली की गई बिट पोजीशन शून्य-भरे हुए हैं। लेफ्ट शिफ्ट एक लॉजिकल शिफ्ट है (बिट्स जो अंत से शिफ्ट हो जाती हैं, साइन बिट सहित, छोड़ दी जाती हैं)।
राइट-शिफ्ट ऑपरेटर शिफ्ट-एक्सप्रेशन में बिट पैटर्न को एडिटिव-एक्सप्रेशन द्वारा निर्दिष्ट पदों की संख्या से दाईं ओर स्थानांतरित करने का कारण बनता है। अहस्ताक्षरित संख्याओं के लिए, शिफ्ट ऑपरेशन द्वारा खाली की गई बिट स्थिति शून्य से भरी हुई है। हस्ताक्षरित संख्याओं के लिए, साइन बिट का उपयोग रिक्त बिट पदों को भरने के लिए किया जाता है। दूसरे शब्दों में, यदि संख्या धनात्मक है, तो 0 का उपयोग किया जाता है, और यदि संख्या ऋणात्मक है, तो 1 का उपयोग किया जाता है।
उदाहरण
#include<iostream> using namespace std; int main() { int a = 1, b = 3; // a right now is 00000001 // Left shifting it by 3 will make it 00001000, ie, 8 a = a << 3; cout << a << endl; // Right shifting a by 2 will make it 00000010, ie, 2 a = a >> 2; cout << a << endl; return 0; }
आउटपुट
यह आउटपुट देगा -
8 2
ध्यान दें कि ये ऑपरेटर नकारात्मक संख्याओं के साथ बहुत अलग व्यवहार करते हैं। एक हस्ताक्षरित ऋणात्मक संख्या के दाएं-शिफ्ट का परिणाम कार्यान्वयन-निर्भर है। यदि आप किसी हस्ताक्षरित संख्या को बाएं-शिफ्ट करते हैं ताकि साइन बिट प्रभावित हो, तो परिणाम अपरिभाषित होता है।
2 जटिल ऑपरेटर भी हैं जिनका उपयोग मान को सीधे बाईं ओर मान निर्दिष्ट करने के लिए किया जा सकता है। ये हैं <<=ऑपरेटर और>>=ऑपरेटर।
शिफ्ट ऑपरेटरों के विस्तृत निरीक्षण के लिए https://msdn.microsoft.com/en-us/library/336xbhcz.aspx देखें।