Working with Binary Digits
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXZq--JqqfZBnXQtzmkdHGuBU9i1eQvALVn5scYR-W47JJ4KjxFTysJmdjf6QJd8IkXbpoIbA7aC-N9QwJblFyE9smEXSIMybhoxjb5kAsMBJWek4a6V4U2GpUarEWzqV8aAC4aoXd8KIuk1vJPPNWORDPmg-VNz7QZ_AtNNp1XKZuzCAODw5rGJ8n/w640-h480/Working%20with%20Binary%20Digits.jpg)
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