What is Bitwise Operators in C?

Bitwise Operators in C Language: C Language में कुछ ऐसे Operators भी Provide करता है, जिनका प्रयोग हम किसी Identifier की Bits पर कर सकते हैं। इस Operator का उपयोग सीधे ही किसी Identifier की Bits पर काम करने के लिये किया जाता है। ये Operator हमेंशा Integer प्रकार के Data Type के साथ ही Use होता है, यानी Bitwise Operators को केवल Integer प्रकार के Data Type के Identifier के साथ ही प्रक्रिया करने के लिए Use किया जा सकता है। C Language में इनकी कुल संख्‍या छः होती हैः

& Bitwise AND Operator
! Bitwise OR Operator
^ Bitwise Exclusive OR Operator
<<  Bitwise SHIFT LEFT Operator
>>  Bitwise SHIFT RIGHT Operator
~ Bitwise Ones Compliment Operator

जैसाकि हमने पहले भी कहा है कि Computer की Memory में किसी मान को Store किए बिना हम उस मान के साथ किसी प्रकार की कोई प्रक्रिया नहीं कर सकते हैं। लेकिन चूंकि Computer केवल एक Electronic Machine है, इसलिए हम इसमें जिस किसी भी मान को Store करते हैं, वह मान Binary Digits के रूप में ही Store होता है। जब हम किसी Identifier का प्रयोग करके किसी Memory Location को Access करते हैं, तब वास्तव में हम उस Identifiers से Associated Memory Block के पूरे Byte को Use कर रहे होते हैं।

लेकिन C हमें कुछ Bitwise Operator भी Provide करता है, जिनका प्रयोग करके हम किसी Identifier (Variables or Constants) से Associated पूरे Memory Byte को Access करने के बजाय Memory Byte के किसी भी Bit को Access करने की क्षमता प्राप्त करते हैं। इन Bitwise Operators का यदि ठीक तरह से प्रयोग किया जाए, तो हम हमारे Program की Speed को बहुत तेज कर सकते हैं, क्योंकि Bytes को Access करने की तुलना में Bits को Access करने में Computer को कम समय लगता है। साथ ही इन Operators का प्रयोग करके Directly Memory Location के Bits को Access कर पाने के कारण हम Computer के Hardware को भी Directly Access कर पाने में सक्षम हो सकते हैं।

Bitwise Operators को समझने से पहले हमें ये समझना होगा कि Computer विभिन्न प्रकार के Character व Integer मानों को Computer की Memory में किस तरह से Store करता है। Computer में 8 Bits के समूह को Byte, 16 Bits के समूह को Word तथा 32 Bits के समूह को DWord कहा जाता है। हम जब भी Character प्रकार का कोई Identifier Create करते हैं, तो Computer एक Byte की Space को Reserve करता है, जो कि 8 Bits का एक समूह होता है। इस Byte को हम निम्नानुसार चित्र द्वारा Represent कर सकते हैं:

Bitwise Operators - C in Hindi

किसी भी Byte या Word के Bits की Position को हमेंशा Right Side से Count किया जाता है। इस Byte के हर Bit में केवल True या False यानी या ही Store हो सकता है। किसी Byte के पहले Bit (0th Position Bit) को Least Significant Bit (LSB) व अन्तिम Bit (7th Position Bit) को Most Significant Bit (MSB) कहा जाता है। किसी Signed Character Data Type के Identifier में Most Significant Bit हमेंशा Sign को Represent करता है। इस Bit का मान यदि 0 होता है, तो इसमें Stored Bit Pattern किसी Positive संख्‍या को Represent करता है, जबकि यदि इस Bit का मान 1 हो, तो इसमें Stored Bit Pattern किसी Negative संख्‍या को Represent करता है।

किसी Byte में स्थित हर Bit का उसकी Position के आधार पर एक Unique मान होता है। किसी Byte के Least Significant Bit में Store हो सकने वाली संख्‍या का अधिकतम मान 1 हो सकता है और हम जैसे-जैसे Least Significant Bit से Most Significant Bit की तरफ बढते जाते हैं, वैसे-वैसे उन Bits के मान Store करने की क्षमता पिछले मान की तुलना में Double होती जाती है।

उदाहरण के लिए किसी भी Byte के 0th Position में Store हो सकने वाला अधिकतम मान हो सकता है, इसलिए 1st Position पर Store हो सकने वाली संख्‍या का मान पिछले Bit की अधिकतम Capacity से दुगुना, यानी हो सकता है। इसी तरह से 3rd Position पर Store हो सकने वाली संख्‍या का अधिकतम मान हो सकता है इसी तरह से आगे भी यही क्रम जारी रहता है। यदि हम इस प्रक्रिया को चित्र द्वारा Represent करें, तो निम्न चित्र में हम देख सकते हैं कि किस प्रकार से हर Bit LSB सेMSB की तरफ बढते हुए दुगुने मान को Represent करने लगता हैः

Bitwise Operators - C in Hindi

चूंकि Character Type का Variable Memory में 1 Byte या 8 Bit लेता है, इसलिए हमने इस प्रक्रिया को एक Character प्रकार के Identifier पर Apply करके समझाया है। लेकिन ये प्रक्रिया एक Integer प्रकार के Word पर भी पूरी तरह से Apply होती है, अन्तर केवल इतना है कि एक Integer में कम से कम 16 Bits होते हैं, इसलिए Bits की संख्‍या व उनकी Location के आधार पर एक Integer में Data को Store करने की क्षमता काफी बढ जाती है, जिसे हम निम्न चित्र द्वारा समझ सकते हैं:

Bitwise Operators - C in Hindi

इस तरह से यदि किसी Unsigned Character प्रकार के Identifier के सभी Bits में निम्न चित्रानुसारFalse यानी Store हो, तो ये Byte Numerical मान 0 को Represent करता है।

Bitwise Operators - C in Hindi

इसी तरह से यदि इस Byte के सभी Bits का मान True या हो, तो ये Byte निम्न चित्रानुसार Numerical मान 255 को Represent करता है।

Bitwise Operators - C in Hindi

Byte में Stored Binary Bits के आधार पर Decimal Number प्राप्त करने का तरीका ये है कि Byte में जिस-जिस Bit Position पर True या Stored होता है, उन्हें आपस में जोड लिया जाता है। इस जोड से प्राप्त होने वाला मान उस Binary Bit-Pattern का Decimal मान होता है। उदाहरण के लिए निम्न Byte Representation में 0th, 1st व 3rd Bit Position पर True या 1 Stored है, इसलिए इस Binary का Decimal मान 1 + 2 + 8 = 11 होगा।

Bitwise Operators - C in Hindi

हम जानते हैं कि किसी भी Byte में उसकी Bit Position पर या ही हो सकता है, जहां Lowest Value को Represent करता है, जबकि Highest Values को Represent करता है। इसलिए यदि इस तरीके के आधार पर हम किसी Unsigned Character प्रकार के Identifier के सभी Bits में 0Store कर दें, तो Byte में Store हो सकने वाला Minimum मान ही हो सकता है, जबकि यदि सभी Bit Position को उनकी High Value यानी से Fill कर दें, तो Byte में Store हो सकने वाला Maximum मान [1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255] ही हो सकता है। यही वजह है कि किसी Unsigned Character प्रकार के Data Type में हम इससे बडी संख्‍या को Store नहीं कर सकते हैं।

जब हम Unsigned Byte में Store हो सकने वाले मान की गणना करते हैं, तब हमें 0 से 255 की Range प्राप्त होती है, लेकिन जब हम एक Byte में Signed प्रकार के मान के Store होने की Range ज्ञात करना चाहते हैं, तब Byte का Most Significant Bit Sign की Information को Hold करने लगता है। यदि इस Bit का मान 0 होता है, तो इसमें Stored संख्‍या Positive होती है, जबकि इस Bit में Stored मान होने की स्थिति में इसमें Stored Bit-Pattern के आधार पर Generate होने वाली संख्‍या Negative हो जाती है। इस स्थिति में यदि हम किसी Sign वाली संख्‍या की Minimum व Maximum Range ज्ञात करना चाहें, तो Minimum संख्‍या का Bit-Pattern निम्नानुसार बनेगाः

Bitwise Operators - C in Hindi

हम देख सकते हैं कि इस Bit Pattern में केवल Most Significant Bit यानी Sign Bit ही है जो बता रहा है, कि ये संख्‍या एक Negative संख्‍या है, साथ ही हम ये भी देख सकते हैं कि इस MSB की Position पर True या Store होने का मतलब ये भी है कि इस संख्‍या का Decimal मान 128 है। यानी इस संख्‍या का वास्तविक मान -128 है। अब यदि हम इस Byte के Bit-Pattern को Invert कर दें, यानी True को False व False को True कर दें, तो हमें निम्नानुसार Bit-Pattern प्राप्त होता हैः

Bitwise Operators - C in Hindi

इस Bit-Pattern में MSB का मान है जो बताता है, कि इस Byte में Stored संख्‍या एक Positive संख्‍या है। अब यदि हम इस संख्‍या का Decimal मान ज्ञात करें, तो हमें [1 + 2 + 4 + 8 + 16 + 32 + 64 = 127 ] प्राप्त होता है, जो कि इस Byte में Store हो सकने वाला Maximum मान है।

जिस तरह से हमने एक Byte की Bit Position पर Stored या के आधार पर एक Byte में Store हो सकने वाले न्यूनतम व अधिकतम मान को Calculate किया है, उसी तरह से हम Integer व Long Integer Type के Identifier में Store हो सकने वाले न्यूनतम व अधिकतम मान को भी ज्ञात कर सकते हैं।

इसके लिए हमें केवल ये ध्यान रखना होता है, कि 2 Byte के Integer में 16 Bit होते हैं, इसलिए 2 Byte के Integer की Limit ज्ञात करने के लिए हमें 16 Bits के Pattern के आधार पर Range ज्ञात करना पडेगा जबकि Long Integer प्रकार का Identifier Memory में 4 Byte या 32 Bit Reserve करता है, इसलिए Long Integer प्रकार के Identifier में Store हो सकने वाली Minimum व Maximum संख्‍या का मान प्राप्त करने के लिए हमें 32 Bit के Pattern बनाने पडेंगे।

एक बात हमेंशा ध्यान रखें, कि जब किसी Identifier में Store होने वाली संख्‍या Unsigned होती है, तब Byte, Word व DWord के सभी Bits के आधार पर उसमें Store हो सकने वाली Maximum व Minimum संख्‍या तय करते हैं, लेकिन जब किसी Byte, Word या DWord में Store होने वाली संख्‍या Sign वाली होती है, तब Byte, Word व DWord के सभी Bits मिलकर उनमें Store होने वाली संख्‍या की Range तय नहीं करते हैं, बल्कि इन सभी का MSB संख्‍या का Sign तय करने का काम करते हैं।

इस कारण से एक Unsigned Identifier जितना मान Store कर सकता है, Sign वाला Identifier उसका आधा ही Store करता है। यानी Sign वाले Identifier की Range Positive संख्‍या Store करने के लिए आधी कम हो जाती है, लेकिन Negative संख्‍या Store करने के लिए आधी बढ जाती है।

दसमलव वाले मान भी Computer में Bit-Pattern के रूप में ही Store होते हैं, लेकिन उनके Store होने के तरीके में थोडा अन्तर होता है और अन्तर ये होता है कि हर दसमलव वाली संख्‍या Sign वाली संख्‍या ही होती है। यानी Float, Double या Long Double संख्‍या कभी भी Unsigned नहीं होती है। साथ ही इनके Bit-Pattern के कुछ Bits दसमलव के बाद वाली संख्‍या को Represent करने का काम करते हैं, जबकि कुछ Bits दसमलव से पहले वाली संख्‍या को Represent करने का काम करते हैं।

जिस तरह से हम किसी Byte में Stored Bit-Pattern के आधार पर Decimal संख्‍या ज्ञात कर सकते हैं, उसी तरह से हम किसी Decimal संख्‍या का Bit Pattern भी बना सकते हैं। उदाहरण के लिए मानलो हमें मान 57 का Bit-Pattern ज्ञात करना है। इस Bit-Pattern को ज्ञात करने के लिए हमें निम्न क्रम को Use करना होता हैः

Bitwise Operators - C in Hindi

सबसे पहले हमें ये पता लगाना होता है, कि हम जिस संख्‍या का Bit-Pattern ज्ञात करना चाहते हैं, उस संख्‍या को Represent करने वाला कोई Bit Byte के Bit-Patter में उपलब्ध है या नहीं। यदि ज्ञात की जाने वाली संख्‍या का मान Bit-Pattern में ना हो, तो ज्ञात की जाने वाली संख्‍या से छोटी संख्‍या के Bit को True या कर देना चाहिए।

उपरोक्त चित्र में हम देख सकते हैं कि इस Byte के Bit-Pattern में 1, 2, 4, 8, 16, 32, 64 व 128 हैं, लेकिन 57 नहीं है। इस स्थिति में 57 से Just छोटा मान 32 है, इसलिए हमें Byte के Bit Pattern में इसी मान को True या 1 करना होता है, जैसाकि हमने निम्न चित्र में किया है।

Bitwise Operators - C in Hindi

अब ज्ञात की जाने वाली संख्‍या के मान में से Set किए गए Bit की संख्‍या को घटाना होता है।

चूंकि हमने 32 के मान के Bit को Set किया है, इसलिए हमें 57 में से 32 को घटाना होता है। 57 में से 32 को घटाने पर 25 बचता है, इसलिए अब हमें इस 25 की Binary Set करनी है। इसके लिए हमें फिर से पिछले Step को Use करना होता है। चूंकि हमारे Byte के Patter में मान 25 के लिए भी कोई संख्‍या नहीं है, इसलिए हमें 25 से छोटे मान के Bit को Set करना होता है, जो कि हमारे इस उदाहरण में 16 है। इस Bit को कर देने पर हमें निम्नानुसार Pattern प्राप्त होता हैः

अब हमें फिर से बची हुई संख्‍या को ज्ञात करना होता है। इसके लिए हमें Current संख्‍या में से Set की गई Bit की संख्‍या को घटाना होता है।

Bitwise Operators - C in Hindi

चूंकि हमारी Current संख्‍या 25 है, जिसमें से हमने 16 को Set किया है, इसलिए अब हमें 25 में से 16 को घटाना होता है। ऐसा करने पर हमें Resultant मान 25 – 16 = 9 प्राप्त होता है, जिसके लिए हमें Bit को Set करना होता है। यहां फिर हमें Step1 को Use करना होता है, जिससे हमें मान 8 मिलता है, जिसे Set करना होता है। क्योंकि मान 8 ही मान 9 से सबसे कम छोटा मान है। मान 8 के Bit को Set करने पर हमें निम्नानुसार Bit-Pattern प्राप्त होता हैः

Bitwise Operators - C in Hindi

Current मान 9 में से Currently Set किए गए Bit के मान 8 को घटाने पर हमें 1 प्राप्त होता है, और अब हमें केवल मान 1 के लिए Bit को Set करना है। चूंकि मान 1 को Represent करने वाला bit 0th Position पर है, इसलिए केवल इस Bit को Set कर देने पर हमें 57 का Binary Bit-Pattern प्राप्त हो जाएगा, जो कि निम्नानुसार हैः

Bitwise Operators - C in Hindi

चूंकि हमें हमारे Required मान की Binary Bit-Pattern प्राप्त हो चुकी है, इसलिए जिन भी Bits की Position Blank है, उनमें 0 Fill कर देने से हमें हमारे Required मान की Actual Bit-Pattern प्राप्त हो जाता है, जो कि निम्नानुसार हैः

Bitwise Operators - C in Hindi

हमें मान 57 का Binary Bit Pattern 00111001 प्राप्त हुआ है। ये Bit Pattern सही है या नहीं इस बात की जांच करने के लिए हम उन Bits के मानों को जोड सकते हैं, जिनमें True या Stored है।

Bitwise Operators - C in Hindi

हमारे Bit-Pattern में 0th, 3rd, 4th व 5th Position के Bits On है, जिनके मानों का Total [ 1 + 8 + 16 + 32 = 57] है, जो कि वही मान है, जिसका Bit-Pattern हम बनाना चाहते थे, इसलिए हमारा Bit-Pattern सही है।

C Language में मूल रूप से 6 Bitwise Operators होते हैं और हर Bitwise Operator की अपनी अलग विशेषता है, जिनका प्रयोग विभिन्‍न प्रकार की जरूरतों को पूरा करने के लिए किया जाता है। चूंकि, Bitwise Operators, किसी Single char या int Type के Variable के विभिन्‍न Bits पर ही काम करता है, इसलिए इन Operators का प्रयोग करके हम बहुत कम Memory को उपयोग में लेते हुए ज्‍यादा प्रकार की जरूरतों को पूरा करने की क्षमता प्राप्‍त कर लेते हैं।

इतना ही नहीं, क्‍योंकि Bitwise Operators हमेंशा किसी Identifier के Bits पर काम करता है, इसलिए Bitwise Operators के साथ Pointers का प्रयोग करते हम Bit Level पर Programming कर सकते हैं। यानी Hardware Level की Programming कर सकते हैं। इसलिए Bitwise Operators के बारे में अच्‍छी तरह से समझना उस स्थिति में काफी उपयोगी साबित होता है, जब हम C Language का प्रयोग करते हुए ऐसे Embedded Programs Create करते हैं, जिन्‍हें किसी CHIP में Write करना होता है। क्‍योंकि Bitwise Operators का प्रयोग Hardware Programming के लिए भी काफी उपयोगी होता है।

इसलिए Bitwise Operators के बारे में अच्‍छी तरह से समझना व विभिन्‍न Bitwise Operators को बेहतर तरीके से उपयोग में लेने के बारे में जानना, एक अच्‍छा C Programmer बनने के लिए बहुत जरूरी होता है, ताकि Hardware Level की Programming को भी आसानी से समझा जा सके और इन Operators को बेहतर तरीके से समझने के लिए आप हमारी पुस्‍तक C Programming Language in Hindi पढ सकते हैं, जिसमें सभी Bitwise Operators के बारे में Detail से व विभिन्‍न प्रकार के सरल Example Programs के माध्‍यम से Discuss किया गया है। (Bitwise Operators in C Language)

What is Logical Operator in C Language?
There are only 3 types of Programming Statements

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW GET DEMO REVIEWS