Header Ads

ad728
  • New Updates

    Working with Binary Digits


    Working with Binary Digits

    कई बार हमें किसी Integer मान की Binary Values के साथ प्रक्रिया करने की जरुरत पद जाती है | इस स्थिति में हमें किसी मान के Binary Equivalent को Screen पर Display करने की जरुरत पडती है | लेकिन “C” Language में कोई मान ऐसा Function नहीं है , जो किसी Integer मान की Binary को Screen पर Display करता हो | फिर भी “C” Language में उपलब्ध Bitwise Operator का प्रयोग करके हम एक ऐसा Function Create कर सकते हैं , जो किसी Integer की Binary Value को Screen पर Display कर सकता है |

    
    The binary() Function
            binary(int n)
            {
               int j , k , andMask ;
               for(j=15; j>=0; j--)
              {
                  andMask =1<<j;
                  k = n& andMask;
                  k = = 0 ? printf(“0”):printf(“1”);
               }
          }
    
    

    इस Function में Formal Argument Accept करने के लिए Formal Variable n लिया है | कसी भी Operand के Bit – Pattern को 16 Digits में Show किया जाता है और इस 16 Digit के Bit- Pattern में Bits हमेंशा Right Side से Fill होना शुरू होता है और अंतिम Bit हमेंशा Left Side में fill होता है | जबकि जिस क्रम में ये Bits fill होते हैं , उसी क्रम में यदि इन्हें Screen पर Print कर दिया जाए , तो Print होने वाला Bit – Pattern . Real Bit – Pattern से बिलकुल विपरीत होगा |

    इसलिए ये जरुरी है कि किसी भी Operand के Bit – Pattern की अंतिम Location के Bit को Screen पर सबसे पहले Print किया जाए व प्रथम Bit को सबसे अन्त में , ताकि Print होने वाला Bit Pattern वास्तविक Bit Pattern हो |

    इसी वजह से हमने इस Function में एक for loop चलाया है और इस Loop को Increment ना करके Decrement किया है ताकि सर्वप्रथम 15th Bit की ON या OFF स्थिति Print हो और Bit Pattern के प्रथम Bit की स्थिति सबसे अन्त में Print हो | इस for Loop के Variable का प्रारम्भिक मान 15 दिया है , ताकि Operand के Bit- Pattern की 15th Location का Bit सर्वप्रथम Print हो |

    इस Loop के Variable को क्रम से Decrement किया गया है , ताकि जब 15th Location का Bit Print हो जाने के बाद 14th Location का Bit Print हो | इस प्रकार से ये क्रम 0 तक चलाया गया है , ताकि किसी भी Operand के Bit Pattern की Bits 16 Digits तक Print हो |

    यदि किसी Bit – Pattern को एक Bit Left में Shift किया जाए, तो Bit – Pattern के Operand का मन दुगुना हो जाता है | यदि इसी Concept का उपयोग किया जाए तो हम कह सकते हैं कि हमें एक ऐसे Bit – Pattern की जरुरत होगी जिसका मान Loop के प्रथम Iteration पर 1000000000000000 हो ताकि हम 15th Bit की ON या OFF स्थिति को Print कर सकें |

    फिर Loop के दूसरे Iteration में इस Mask का Bit – Pattern 0100000000000000 हो ताकि हम 14th Bit की स्थिति को Print कर सकें और इसी क्रम में Loop के अंतिम Iteration पर इस Mask का Bit – Pattern 0000000000000001 हो जाए , ताकि हम Operand के प्रथम Bit की स्थिति को Print कर सकें |

    यदि हम प्रथम Bit के Pattern को देखें तो ये अंक 1 का Bit – Pattern है | यानी 0000000000000001 Bit Pattern को यदि Decimal में बदला जाए तो इसका मान 1 होगा | यदि इस अंक के Bit – Pattern को एक अंक Left Shift किया जाए तो ये मान 0000000000000010 होगा , जो कि किसी Operand के दूसरे Bit को दर्शाएगा | इस कारण से हमने andMask = 1 << i ; Statement प्रयोग किया है |

    Loop के प्रथम Iteration में j का मान 15 होता है | इस वजह से ये Statement andMask = 1 << 15 ; हो जाता है | ये Statement अंक एक के Bit – Pattern का मान 15 Bit Left में shift कर देता है , जिसमें Bit Pattern 1000000000000000 हो जाता है , जो कि 15th Location का मान होता है | इस प्रकार से andMask का मान 32768 हो जाता है |

    अब दूसरा Statement Execute होता है | k = n& andMask ; Statement को यदि Expand करें , तो ये k = n &32768; हो जाता है | अब  Called Function से n का जो मान प्राप्त होता है उस मान के 15th Bit को Bitwise Operator & द्वारा check किया जाता है कि 15th Bit की स्थिति क्या है ? k==0? printf(“0”) : printf(“1”); Statement द्वारा यदि इस 15th Location की Bit OFF होती है , तो Output में k का मान 0 Print हो जाता है अन्यथा k का मान 1 Print होता है |

    दूसरे Iteration में for Loop के Variable का मान जब 14 हो जाता है , तब andMask = 1 << j; Statement द्वारा andMask का मान 16384 हो जाता है | k=n & andMask ; Statement द्वारा Expand होता है और k = n&16384; हो जाता है | अब Called Function से प्राप्त Variable n  के मान की 14th Location की Bit Check होती है और Bit की स्थिति को Print कर दिया जाता है |

    इस प्रकार से 13th , 12th , 11th  को Check करते हुए अन्त में 0th Location पर के Bit को Check किया जाता है | यदि Bit On होता है तो 1 Print होता है यदि Bit OFF होता है तो 0 Print होता है | इस प्रकार से किसी भी Operand के Bit – Pattern को इस Function द्वारा Print किया जा सकता है |

    किसी संख्या की Binary Value ज्ञात करने के लिए इस Function को हम निम्नानुसार Use कर सकते हैं |

    
    #include <stdio.h>
    #include <conio.h>
    void binary(int);
    main()
    {
      int bin;
      printf("Enter an Integer to get that BINARY equivalent : ");
      scanf("%d", &bin);
      printf("\n Binary of the %d is : ");
      binary(bin);
      getch();
    }
     //UDF
     void binary( int n )
     {
      int j, k, andMask;
      for ( j=15; j >= 0; j--)
     {
      andMask = 1 << j;
      k = n & andMask;
      k == 0 ? printf("0") : printf("1");
     }
    }
    
    Output
    
     Enter an Integer to get that BINARY equivalent : 45
    
     Binary of the -509681136 is : 0000000000101101
    

    इस binary() को Modify करके हम इसे किसी बड़ी संख्या की Binary , ज्ञात करने के लिए भी Use कर सकते हैं | Modified Function निम्नानुसार बनाया जा सकता है |

    
    void binary( long n )
    {
      long j, k, andMask;
      for ( j=31; j >= 0; j--)
     {
       andMask = 1 << j;
       k = n & andMask;
      k == 0 ? printf("0") : printf("1");
     }
    }
    

    No comments

    Post Top Ad

    ad728

    Post Bottom Ad

    ad728