Bitwise AND Operator in C Language

Bitwise AND Operator : ये Operator Use करके हम दो Identifier के Bits पर AND Masking की प्रक्रिया को Apply करते हैं। AND Masking में दोनों Identifiers के Bits आपस में AND Form में Compare होते हैं। यदि दोनों Identifiers में समान Position पर Bit का मान 1 हो यानी Bit True हो तो Resultant Bit भी True होता है, अन्‍यथा Resultant Bit False हो जाता है।

उदाहरण के लिए 19 की Binary 10011 होती है और 21 की Binary 10101 होती है। अब यदि निम्नानुसार दो Variables में ये दोनों मान Stored हों:

int firstValue = 19;      //Binary : 10011
int secondValue = 21;     //Binary : 10101
int resultValue;

और यदि इन दोनों Identifiers पर निम्नानुसार AND Masking करके Resultant मान को result नाम के Variable में Store किया जाए, तो Result निम्नानुसार प्राप्त होगा :

result = firstValue & secondValue;
firstValue’s Binary      :       10011                    // Decimal Value = 19
secondValue’s Binary     :       10101                    // Decimal Value = 21    
-----------------------------------------
resultValue’s Binary     :       10001                    // Decimal Value = 17
-----------------------------------------

AND Masking में निम्नानुसार Table के अनुसार Bits पर प्रक्रिया होती है, जिसमें यदि दोनों Identifiers के समान Position के दोनों Bits का Comparison होता है और समान Position पर ही Resultant Bit Return होता है।

Bitwise AND Operator

इस Bitwise Operator का प्रयोग अक्सर ये जानने के लिए किया जाता है, कि किसी Operand का कोई अमुक Bit ON ( 1 ) है या OFF ( 0 ) किसी Operand का कोई Bit On है या Off, ये जानने के लिए हमें एक अन्‍य Operand लेना होता है और उस Operand में उस Bit को On रखा जाता है, जिसे प्रथम Operand में Check करना होता है।

उदाहरण के लिए माना एक Operand का Bit Pattern 11000111 है और हम जानना चाहते हैं कि इस Pattern में चौथा Bit ON है या नहीं। ये जानने के लिए हमें एक दूसरा Operand लेना होगा और उस Operand के Bit Pattern में चौथे Bit को ON(1) व शेष Bits को OFF(0) रखना होगा। इस प्रकार से हमें दूसरे Operand का जो Bit Pattern प्राप्त होगा वह 00001000 होगा, जिसका चौथा Bit ON है।

किसी Operand के Bit Pattern के किसी Bit की स्थिति पता करने के लिए दूसरा Bit Pattern लेकर जो प्रक्रिया की जाती है, उसे Masking कहते हैं और जब इस प्रक्रिया में Bitwise Operator & का प्रयोग किया जाता है, तब इसे AND Mask कहते हैं।

Trick ये है कि जब हम प्रथम Operand को & Operator द्वारा दूसरे Operand के Bit Pattern से Compare करते हैं तब यदि प्रथम Bit Pattern में चौथा Bit ON होता है, तो ही Comparison से प्राप्त Resultant Bit Pattern में भी चौथा Bit ON होता है अन्‍यथा चौथा Bit Off होता है। इस Masking को हम निम्नानुसार Represent कर सकते हैं:

First Operand       :       11000111
Second Operand      :       00001000
---------------------------------------------
AND MASK            :       00000000
---------------------------------------------

इस उदाहरण में हम देख सकते हैं कि पहले Bit-Pattern का चौथा Bit Off है, इसलिए Resultant Bit-Pattern में भी चौथा Bit Off है। अब निम्न Fragments को देखिए:

First Operand       :       11001001
Second Operand      :       00001000
---------------------------------------------
AND MASK            :       00001000
---------------------------------------------

इस Fragment में हम देख सकते हैं कि पहले Bit-Pattern का चौथा Bit On है और यही जानने के लिए कि पहले Operand का चौथा Bit On है या नहीं, हमने एक Mask Bit Pattern Create किया है, जिसके चौथे Bit को On रखा है। इस स्थिति में Resultant Bit-Pattern का चौथा Bit केवल उसी स्थिति में On हो सकता है, जब Check किए जा रहे Operand के Bit-Pattern में चौथा Bit On हो। इस तरह से AND Masking के उपयोग द्वारा हमें पहले Operand के चौथे Bit की स्थिति का पता चल जाता है।

किसी भी Bit-Pattern में हर Bit की Position का एक मान होता है। इस Position के मान द्वारा हम Directly उस Bit को Refer कर सकते हैं। उदाहरण के लिए निम्न चित्र को देखिए:

Bitwise AND Operator

इस चित्र में हर Bit Position के साथ एक Number Associated है। यदि हम किसी Bit-Pattern के चौथे Bit को Refer करना चाहते हैं, तो हमें मान 16 को Use करना होता है। इसी तरह से यदि हमें किसी Bit Pattern के छठे Bit को Access करना हो, तो हमें इस Bit Position से Associated मान 64 को Use करना होता है।

चलिए, अब हम एक उदाहरण द्वारा Logical AND Operator को Use करके किसी Identifier के किसी Particular Bit की Status को Check करते हैं कि वह Bit On है या नहीं।

इस उदाहरण में हमने एक Identifier x में एक मान 150 Store किया है, जिसका Bit-Pattern 1001011 होता है। हम इस Bit-Pattern के पांचवे व छठे Position के Bit की ON/OFF Status जानना चाहते हैं। चूंकि हम किसी भी मान के Bit-Pattern को Binary Form में Use नहीं कर सकते हैं, इसलिए किसी Bit Position को Refer करने के लिए हमें उसके साथ Associated Decimal Number को Use करना होता है।

Program
#include <stdio.h>

main()
{
  int x = 150;		// Bit-Pattern of 150 = 10010110
  int j;
  clrscr();

  printf("\n Value of x is %d ", x);

  j = x & 16;
  (j == 0) ?  printf("\n Fifth Bit of value %d is Off", x) : 
  printf("\n Fifth Bit of value %d is On", x); 

  j = x & 32;
  (j == 0) ?  printf("\n Sixth Bit of value %d is Off", x) : 
  printf("\n Sixth Bit of value %d is On", x); 
}

Output
  Value of x is 150
  Fifth Bit of value 150 is On
  Sixth Bit of value 150 is Off

जब ये Program Run होता है, तब निम्नानुसार Form में j = x & 16; j = x & 32; Statements को Execute करता है:

For Fifth Bit of the value of x:     j = x & 16;
Bit-Pattern of x     : 10010110
Bit-Pattern of Mask  : 00010000
-------------------------------
AND MASK             : 00010000
-------------------------------

For Sixth Bit of the value of x: j = x & 32;
Bit-Pattern of x     : 10010110
Bit-Pattern of Mask  : 00100000
-------------------------------
AND MASK             : 00000000
-------------------------------

चूंकि जब हम पांचवे Bit को Check करते हैं, तब मान 150 का पांचवा Bit On होने की वजह से Making Process से 1 Generate होता है और ये 1 Variable j में Store हो जाता है। फिर Ternary Operator में (j==0) Expression Execute होता है, जो कि False हो जाता है, क्योंकि j का मान 1 है और (1==0) नहीं होता है। इस वजह से Ternary Operator के दूसरे Statement का Execution हो जाता है, जो Output में निम्नानुसार Message प्रदान करता है:

Fifth Bit of value 150 is On

लेकिन जब हम छठे Bit को Check करते हैं, तब मान 150 का छठा Bit Off होने की वजह से Masking Process से 0 Generate होता है और ये 0 Variable j में Store हो जाता है। अगले Statement में फिर से (j==0) Expression Execute होता है, जो इस बार True होने की वजह से Ternary Statement के पहले Statement का Execution कर देता है और हमें निम्नानुसार Output प्राप्त होता है:

Sixth Bit of value 150 is Off

इस प्रकार से हम किसी भी Identifier के मान के किसी Particular Bit को On/Off Status की जानकारी प्राप्त करने के लिए Bitwise AND Operator का प्रयोग कर सकते हैं। सामान्‍यतया विभिन्न प्रकार के Bitwise Operators का प्रयोग विभिन्न प्रकार के Hardware Devices के साथ प्रक्रिया करने के लिए ही करते हैं।

Type Declaration Instructions in Programming
Bitwise OR Operator in C Language

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