Bitwise Operations
Bitwise operators क्या हैं?
C में ज़्यादातर operators पूरी संख्याओं पर काम करते हैं। Bitwise operators एक स्तर और गहरे जाते हैं — ये उन अलग-अलग bits (0 और 1) पर काम करते हैं जिनसे कोई number बनता है। इससे ये compact flags, masks और चतुर तेज़ tricks के लिए एकदम उपयुक्त हैं।
साथ चलने के लिए याद रखें कि 5 जैसी छोटी संख्या bits में इस तरह रखी जाती है: 5 = 0101 और 3 = 0011। Bitwise operators इन bits की तुलना या इन्हें सरकाते हैं।
छह operators
| Operator | नाम | क्या करता है |
|---|---|---|
& | AND | 1 तभी जब दोनों bits 1 हों |
| | OR | 1 अगर कोई भी bit 1 हो |
^ | XOR | 1 तभी जब bits अलग हों |
~ | NOT | हर bit पलट देता है |
<< | Left shift | Bits बाएँ सरकाता है (हर बार ×2) |
>> | Right shift | Bits दाएँ सरकाता है (हर बार ÷2) |
AND, OR, XOR example से
चलिए 5 (0101) और 3 (0011) लें और हर result bit-by-bit देखें।
#include <stdio.h>
int main() {
int a = 5, b = 3; // 0101 और 0011
printf("a & b = %d\n", a & b); // 0001 = 1
printf("a | b = %d\n", a | b); // 0111 = 7
printf("a ^ b = %d\n", a ^ b); // 0110 = 6
return 0;
}a & b = 1
a | b = 7
a ^ b = 6
AND सिर्फ़ वे bits रखता है जो दोनों में 1 हैं। OR 1 रखता है अगर किसी में भी हो। XOR सिर्फ़ वहाँ 1 रखता है जहाँ वे अलग हों।
NOT और shift operators
~ हर bit पलट देता है। Shifts bits को बाएँ या दाएँ सरकाते हैं, जो 2 की powers से गुणा या भाग करता है।
#include <stdio.h>
int main() {
int x = 4; // 0100
printf("x << 1 = %d\n", x << 1); // 1000 = 8 (×2)
printf("x >> 1 = %d\n", x >> 1); // 0010 = 2 (÷2)
printf("~x = %d\n", ~x); // सभी bits पलटता है
return 0;
}x << 1 = 8
x >> 1 = 2
~x = -5
x << 1 बराबर है x * 2, और x >> 1 बराबर है x / 2। Shifting 2 की powers से गुणा या भाग का बहुत तेज़ तरीका है।
Bitwise & बनाम logical &&
यह कई beginners को उलझाता है। ये दिखने में मिलते-जुलते हैं पर बिल्कुल अलग काम करते हैं।
| Expression | प्रकार | 5 और 3 का result |
|---|---|---|
5 & 3 | Bitwise AND | 1 (bits की तुलना) |
5 && 3 | Logical AND | 1 (दोनों true हैं) |
Bit operations के लिए & और conditions के लिए && इस्तेमाल करें। if (a && b) की जगह if (a & b) लिखना चुपचाप गलत logic दे सकता है।
उपयोगी bit tricks
ये तीन patterns interviews और असली code में बार-बार आते हैं:
// जाँचें कि position pos पर bit set है int isSet = (x >> pos) & 1; // pos पर bit set (on) करें x = x | (1 << pos); // pos पर bit clear (off) करें x = x & ~(1 << pos);
आप XOR को यह जाँचने के लिए भी देखेंगे कि number विषम है (x & 1) और बिना temp variable swap करने के लिए (देखें बिना third variable swap)।
आम गलतियाँ
- Bitwise
&/|को logical&&/||से उलझाना। - Type में जितने bits हैं उससे ज़्यादा shift करना, जो undefined behaviour है।
- यह उम्मीद करना कि
~xबस एक value हटा देगा — यह हर bit पलटता है, अक्सर negative number देता है। floatयाdoubleपर bitwise operators इस्तेमाल करना — ये सिर्फ़ integers पर चलते हैं।
एक program लिखें जो एक number पढ़े और loop में (x >> i) & 1 से बताए कि उसके सबसे निचले 4 bits में से हर एक 0 है या 1। इसे 5, 8 और 15 से test करें।
सारांश
- Bitwise operators अलग-अलग bits पर काम करते हैं:
&,|,^,~,<<,>>। - AND साझा 1s रखता है, OR जोड़ता है, XOR अंतर दर्शाता है, NOT पलटता है।
- Left shift गुणा और right shift 2 की powers से भाग करता है।
- Bitwise
&, logical&&जैसा नहीं है। - Shift-and-mask patterns से bit check/set/clear करें।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
C में bitwise operators क्या हैं?
&, OR |, XOR ^, NOT ~, left shift << और right shift >>। ये flags, masks और तेज़ arithmetic जैसे low-level कामों में इस्तेमाल होते हैं।C में & और && में क्या अंतर है?
& bitwise AND है — यह दोनों numbers की bit-by-bit तुलना करके एक number देता है। दोहरा && logical AND है — यह हर पक्ष को true/false मानकर 1 या 0 देता है। एक की जगह दूसरा इस्तेमाल करना बहुत आम bug है।Left shift operator क्या करता है?
x << n, x के सभी bits को n स्थान बाईं ओर सरकाता है, दाईं ओर zeros भरते हुए। हर एक left shift value को दोगुना करता है, तो x << 1 2 से गुणा जैसा है और x << 3 8 से गुणा करता है।C में XOR किसके लिए इस्तेमाल होता है?
^ तभी 1 देता है जब दोनों bits अलग हों। यह bits toggle करने, बिना temporary variable दो numbers swap करने, और सरल checksums तथा encryption में इस्तेमाल होता है। एक उपयोगी गुण यह है कि कोई भी value खुद से XOR होकर 0 बन जाती है।C में किसी विशेष bit के set होने की जाँच कैसे करें?
(x >> pos) & 1 उस bit के set होने पर 1, वरना 0 देता है। किसी एक bit को पढ़ने का यही मानक तरीका है।