Header Ads

ad728
  • New Updates

    Bitwise Operator


    Bitwise Operator

    अभी तक हमने जितने भी Operators के बारे में जाना है , वे सभी Operator किसी Identifier के पुरे Byte पर Operation Perform करते है | लेकिन “C” Language में कुछ ऐसे Operator भी Provide करता है , जिनका प्रयोग हम किसी Identifier की Bits पर कर सकते है | इस Operator का उपयोग सीधे ही किसी identifier की Bits पर काम करने के लिए किया जाता है | ये Operator हमेशा Integer प्रकार के Data Type के साथ ही Use किया जा सकता है | “C” Language में इनकी कुल संख्या छः होती है |


    जैसाकि हमने भी कहा है की Computer की memory में किसी मान को Store किए बिना हम उस मान के साथ कोई प्रक्रिया नहीं कर सकते है | लेकिन चुंकि Computer केवल एक Electronic Machine है , इसलिए हम इसमें जिस किसी भी मान को Store करते है  , वह मान Binary Digits के रूप में ही Store होता है |

    जब हम किसी Identifier का प्रयोग करके किसी Memory Location को Access करते है , तब वास्तव में हम उस Identifier से Associated Memory Block के पुरे Byte को Use कर रहें होते है | लेकिन “C” हमें कुछ Bitwise Operator भी Provide करता है , जिनका प्रयोग करके हम किसी Identifier से Associated पुरे Memory Byte को Access करने के बजाये Memory Byte के किसी भी Bit को Access करने की क्षमता प्राप्त करते है |

    इस Bitwise Operator का यदि ठीक तरह से प्रयोग किया जाये , तो हम हमारे Program की Speed को बहुत तेज कर सकते है , क्योंकि Bytes को Access करने की तुलना में Bits को Access करने में Computer  को कम समय लगता है | साथ ही इस Operator का प्रयोग करके Directly Memory Location के Bits को Access करवाने के कारण हम Computer के Hardware को भी Directly Access कर पाने में सक्षम हो सकते है |

    Bitwise Operators को समझने से पहले हमें ये समझना होगा की Computer विभन्न प्रकार के Character Integer मानों को Computer की Memory में किस तरह से Store करता है | Computer में 8 Bits के समूह को Byte . 16 Bits के समूह को Word तथा 32bits के समूह को Dword कहा जाता है |

    हम जब भी Character प्रकार का कोई Identifier Create करते है , तो Computer एक Byte की Space को Reserve करता है , जो की 8 Bits का एक समूह होता है | इस Byte को इस निम्नानुसार चित्र द्वार Respresent कर सकते है |


     

    किसी भी Byte या Word के Bits की Position को हमेशा Right Side से Count किया जाता है | इस Byte के हर Bit में केवल True या False यानी 0 या 1 ही 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 हो सकने वाला अधिकतम मान 1 हो सकता है , इसलिए 1st Position पर Store हो सकने वाली सकने का मान पिछले Bit की अधिकतम Capacity से दुगुना , यानी 2 हो सकता है | इसी तरह से 3rd Position पर Store हो सकने वाली संख्या का अधिकतम मान 4 हो सकता है इसी तरह से आगे भी यही क्रम जारी रहता है | यदि हम इस प्रक्रिया को चित्र द्वरा Represent करें तो निम्न चित्र में हम देख सकते है की किस प्रकार से हर Bit LSB से MSB की तरफ बदले हुए दुगने मान को Represent करने लगता है |

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

     

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


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


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

    Decimal Value of This Binary [00001011] = 8+2+1 = 11

    हम जानते है की किसी भी Byte में उसकी Bit Position पर 0 या 1 ही हो सकता है , जहां 0 Lowest Value को Represent करता है , जबकि 1 Highest Values को Represent करता है | इसलिए यदि इस तरीके के आधार पर हम किसी Unsigned Character प्रकार के Identifier के सभी Bits में 0 Store कर दें , तो Byte में Store हो सकने वाला Minimum मान 0 ही हो सकता है |

    जबकि यदि सभी Bit Position को उनकी High Value यानी 1 से Fill कर दे , तो Byte में Store हो सकने वाला Maximum मान [1+2+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 मान 1 होने की स्थिति में इसमें Stored Bit Pattern के आधार पर Generate होने वाली संख्या Negative हो जाती है | इस स्थिति में यदि हम किसी Sign वाली संख्या की Minimum Maximum Range ज्ञात करना चाहें , तो Minimum संख्या का Bit – Pattern निम्नानुसार बनेगा |


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


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

    जिस तरह से हमने एक Byte की Bit Position पर Stored 0 या 1 के आधार पर एक 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 प्रकार के Identifer में Store हो सकने वाली Minimum Maximum संख्या का मान प्राप्त करने के लिए हमें 32Bit के Pattern बनाने पडेंगे |

    एक बात हमेशा धयान रखें , कि जब किसी Identifier में Store होने वाली संख्या Unsigned होती है , तब Byte , Word Dword के सभी Bits के आधार पर उसमें Store हो सकने वाली Maximum Minimum संख्या तय करते है , लेकिन जब किसी Byte , Word या Dword में Store होने वाली संख्या Sign वाली होती है , तब Byte , word Dword के सभी Bits मिलकर उनमें Store करने के लिए आधी कम हो जाती है , लेकिन Negative संख्या Store करने के लिए अभी बढ़ जाती है |

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

     

     

    No comments

    Post Top Ad

    ad728

    Post Bottom Ad

    ad728