बिटवाइज़ Operaसी में टॉर्स: AND, OR, XOR, Shift & पूरक
बिटवाइज़ क्या हैं? Operaटॉर्स?
बिटवाइज़ Operaमरोड़ बिट स्तर पर डेटा में हेरफेर करने के लिए उपयोग किया जाता है, जिसे बिट लेवल प्रोग्रामिंग भी कहा जाता है। बिटवाइज़ अपने व्यक्तिगत बिट्स के स्तर पर एक या अधिक बिट पैटर्न या बाइनरी अंकों पर काम करता है। गणना प्रक्रिया को तेज़ बनाने के लिए संख्यात्मक गणनाओं में उनका उपयोग किया जाता है।
'सी' प्रोग्रामिंग भाषा द्वारा प्रदान किए गए बिटवाइज़ ऑपरेटरों की सूची निम्नलिखित है:
Operaटो | अर्थ |
---|---|
& | बिटवाइज़ AND ऑपरेटर |
| | बिटवाइज़ OR ऑपरेटर |
^ | बिटवाइज़ एक्सक्लूसिव OR ऑपरेटर |
~ | बाइनरी वन का पूरक Operaटोर एक एकल ऑपरेटर है |
<< | बायाँ शिफ्ट ऑपरेटर |
>> | राइट शिफ्ट ऑपरेटर |
बिटवाइज़ ऑपरेटरों को सीधे प्राथमिक डेटा प्रकारों जैसे कि फ्लोट, डबल आदि पर लागू नहीं किया जा सकता है। एक बात हमेशा याद रखें कि बिटवाइज़ ऑपरेटरों का उपयोग अधिकतर पूर्णांक डेटा प्रकार के साथ इसकी संगतता के कारण किया जाता है।
बिटवाइज़ लॉजिकल ऑपरेटर डेटा पर बिट दर बिट काम करते हैं, सबसे कम महत्वपूर्ण बिट से शुरू करते हुए, अर्थात एलएसबी बिट जो सबसे दायाँ बिट है, एमएसबी (सबसे महत्वपूर्ण बिट) की ओर काम करते हैं जो सबसे बायाँ बिट है।
बिटवाइज़ लॉजिकल ऑपरेटरों की गणना का परिणाम नीचे दी गई तालिका में दिखाया गया है।
x | y | एक्स और वाई | एक्स | वाई | एक्स ^ वाई |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
बिटवाइज़ और
यह सबसे अधिक इस्तेमाल किए जाने वाले तार्किक बिटवाइज़ ऑपरेटरों में से एक है। इसे एक एकल एम्परसेंड चिह्न (&) द्वारा दर्शाया जाता है। (&) ऑपरेटर के प्रत्येक तरफ दो पूर्णांक अभिव्यक्तियाँ लिखी जाती हैं।
यदि दोनों बिट्स का मान 1 है तो बिटवाइज़ AND ऑपरेशन का परिणाम 1 होगा; अन्यथा, परिणाम हमेशा 0 होगा।
मान लीजिए कि हमारे पास दो चर op2 और op1 हैं जिनके मान इस प्रकार हैं:
Op1 = 0000 1101 Op2 = 0001 1001
चर op1 और op2 पर AND ऑपरेशन का परिणाम होगा
Result = 0000 1001
जैसा कि हम देख सकते हैं, दो चरों की बिट दर बिट तुलना की जाती है। जब भी दोनों चरों में बिट का मान 1 होगा, तो परिणाम 1 होगा अन्यथा 0 होगा।
बिटवार या
इसे एक एकल ऊर्ध्वाधर बार चिह्न (|) द्वारा दर्शाया जाता है। (|) ऑपरेटर के प्रत्येक तरफ दो पूर्णांक व्यंजक लिखे जाते हैं।
बिटवाइज़ OR ऑपरेशन का परिणाम 1 होता है यदि कम से कम एक अभिव्यक्ति का मान 1 है; अन्यथा, परिणाम हमेशा 0 होता है।
मान लीजिए कि हमारे पास दो चर op2 और op1 हैं जिनके मान इस प्रकार हैं:
Op1 = 0000 1101 Op2 = 0001 1001
चर op1 और op2 पर OR ऑपरेशन का परिणाम होगा
Result = 0001 1101
जैसा कि हम देख सकते हैं, दो चरों की बिट दर बिट तुलना की जाती है। जब भी किसी चर में बिट का मान 1 होता है, तो परिणाम 1 होगा या फिर 0 होगा।
बिटवाइज़ एक्सक्लूसिव OR
इसे प्रतीक (^) द्वारा दर्शाया जाता है। (^) ऑपरेटर के प्रत्येक तरफ दो पूर्णांक व्यंजक लिखे जाते हैं।
बिटवाइज़ एक्सक्लूसिव-OR ऑपरेशन का परिणाम 1 होता है यदि केवल एक अभिव्यक्ति का मान 1 है; अन्यथा, परिणाम हमेशा 0 होता है।
मान लीजिए कि हमारे पास दो चर op2 और op1 हैं जिनके मान इस प्रकार हैं:
Op1 = 0000 1101 Op2 = 0001 1001
चर op1 और op2 पर XOR ऑपरेशन का परिणाम होगा
Result = 0001 0100
जैसा कि हम देख सकते हैं, दो चरों की तुलना बिट दर बिट की जाती है। जब भी केवल एक चर का मान 1 होता है तो परिणाम 0 होता है अन्यथा परिणाम 0 होगा।
आइये एक सरल प्रोग्राम लिखें जो बिटवाइज़ लॉजिकल ऑपरेटर्स को प्रदर्शित करता है।
#include <stdio.h> int main() { int a = 20; /* 20 = 010100 */ int b = 21; /* 21 = 010101 */ int c = 0; c = a & b; /* 20 = 010100 */ printf("AND - Value of c is %d\n", c ); c = a | b; /* 21 = 010101 */ printf("OR - Value of c is %d\n", c ); c = a ^ b; /* 1 = 0001 */ printf("Exclusive-OR - Value of c is %d\n", c ); getch(); }
आउटपुट:
AND - Value of c is 20 OR - Value of c is 21 Exclusive-OR - Value of c is 1
बिटवाइज़ शिफ्ट ऑपरेटर
बिटवाइज़ शिफ्ट ऑपरेटर का उपयोग बिट पैटर्न को बाईं या दाईं ओर ले जाने/शिफ्ट करने के लिए किया जाता है। बाएँ और दाएँ दो शिफ्ट ऑपरेटर हैं जो 'C' जो निम्न प्रकार से प्रदर्शित हैं:
Operand << n (Left Shift) Operand >> n (Right Shift)
यहाँ,
- ऑपरेंड एक पूर्णांक अभिव्यक्ति है जिस पर हमें शिफ्ट ऑपरेशन करना होता है।
- 'n' बिट स्थितियों की कुल संख्या है जिसे हमें पूर्णांक अभिव्यक्ति में स्थानांतरित करना है।
लेफ्ट शिफ्ट ऑपरेशन 'n' बिट्स की संख्या को बाईं ओर शिफ्ट कर देगा। अभिव्यक्ति में सबसे बाईं ओर के बिट्स को बाहर निकाल दिया जाएगा, और 0 मान वाले n बिट्स को दाईं ओर भर दिया जाएगा।
राइट शिफ्ट ऑपरेशन 'n' बिट्स की संख्या को दाईं ओर शिफ्ट कर देगा। अभिव्यक्ति में सबसे दाईं ओर के 'n' बिट्स को बाहर निकाल दिया जाएगा, और मान 0 को बाईं ओर भर दिया जाएगा।
उदाहरण: x एक पूर्णांक व्यंजक है जिसका डेटा 1111 है। शिफ्ट ऑपरेशन करने के बाद परिणाम होगा:
x << 2 (left shift) = 1111<<2 = 1100 x>>2 (right shift) = 1111>>2 = 0011
Shifts ऑपरेटरों को संयोजित किया जा सकता है, फिर इसका उपयोग पूर्णांक अभिव्यक्ति से डेटा निकालने के लिए किया जा सकता है। आइए बिटवाइज़ शिफ्ट ऑपरेटरों के उपयोग को प्रदर्शित करने के लिए एक प्रोग्राम लिखें।
#include <stdio.h> int main() { int a = 20; /* 20 = 010100 */ int c = 0; c = a << 2; /* 80 = 101000 */ printf("Left shift - Value of c is %d\n", c ); c = a >> 2; /*05 = 000101 */ printf("Right shift - Value of c is %d\n", c ); return 0; }
आउटपुट:
Left shift - Value of c is 80 Right shift - Value of c is 5
बायाँ शिफ्ट ऑपरेशन करने के बाद मान 80 हो जाएगा जिसका बाइनरी समतुल्य 101000 है।
राइट शिफ्ट ऑपरेशन करने के बाद, मान 5 हो जाएगा जिसका बाइनरी समतुल्य 000101 है।
बिटवाइज़ पूरक ऑपरेटर
बिटवाइज़ कॉम्प्लीमेंट को वन्स कॉम्प्लीमेंट ऑपरेटर भी कहा जाता है क्योंकि यह हमेशा केवल एक मान या ऑपरेंड लेता है। यह एक यूनरी ऑपरेटर है।
जब हम किसी भी बिट पर पूरक क्रिया करते हैं, तो सभी 1, 0 बन जाते हैं और इसके विपरीत।
यदि हमारे पास एक पूर्णांक अभिव्यक्ति है जिसमें 0000 1111 है तो बिटवाइज़ पूरक ऑपरेशन करने के बाद मान 1111 0000 हो जाएगा।
बिटवाइज़ पूरक ऑपरेटर को प्रतीक टिल्ड (~) द्वारा दर्शाया जाता है।
आइये एक प्रोग्राम लिखें जो बिटवाइज़ कॉम्प्लीमेंट ऑपरेटर के कार्यान्वयन को प्रदर्शित करता है।
#include <stdio.h> int main() { int a = 10; /* 10 = 1010 */ int c = 0; c = ~(a); printf("Complement - Value of c is %d\n", c ); return 0; }
आउटपुट:
Complement - Value of c is -11
यहां एक और कार्यक्रम है, जिसमें अब तक चर्चा किए गए सभी ऑपरेटों का एक उदाहरण है:
#include <stdio.h> main() { unsigned int x = 48; /* 48 = 0011 0000 */ unsigned int y = 13; /* 13 = 0000 1101 */ int z = 0; z =x & y; /* 0 = 0000 0000 */ printf("Bitwise AND Operator - x & y = %d\n", z ); z = x | y; /* 61 = 0011 1101 */ printf("Bitwise OR Operator - x | y = %d\n", z ); z= x^y; /* 61 = 0011 1101 */ printf("Bitwise XOR Operator- x^y= %d\n", z); z = ~x; /*-49 = 11001111 */ printf("Bitwise One's Complement Operator - ~x = %d\n", z); z = x << 2; /* 192 = 1100 0000 */ printf("Bitwise Left Shift Operator x << 2= %d\n", z ); z= x >> 2; /* 12 = 0000 1100 */ printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}
जब हम प्रोग्राम को संकलित और चलाते हैं, तो यह निम्नलिखित परिणाम उत्पन्न करता है:
Bitwise AND Operator - x & y = 0 Bitwise OR Operator - x | y = 61 Bitwise XOR Operator- x^y= 61 Bitwise One's Complement Operator - ~x = -49 Bitwise Left Shift Operator x << 2= 192 Bitwise Right Shift Operator x >> 2= 12
सारांश
- बिटवाइज़ ऑपरेटर 'C' द्वारा प्रदान किया गया विशेष ऑपरेटर सेट है।
- इनका उपयोग बिट स्तरीय प्रोग्रामिंग में किया जाता है।
- इन ऑपरेटरों का उपयोग पूर्णांक अभिव्यक्ति के बिट्स में हेरफेर करने के लिए किया जाता है।
- लॉजिकल, शिफ्ट और कॉम्प्लीमेंट तीन प्रकार के बिटवाइज ऑपरेटर हैं।
- बिटवाइज़ पूरक ऑपरेटर का उपयोग किसी अभिव्यक्ति के बिट्स को उलटने के लिए किया जाता है।