বিটওয়াইজ অপারেটর (Bitwise Operator) — একদম সহজভাবে বুঝে ফেলো
প্রোগ্রামিংয়ে আমরা সাধারণত logical operator (যেমন &&, ||, !) ব্যবহার করি শর্ত যাচাই করার জন্য।
কিন্তু bitwise operator একটু আলাদা — এটা কাজ করে bit-level এ, মানে সংখ্যার binary রূপের উপর সরাসরি অপারেশন চালায়।
এই জিনিসটা competitive programming (CP) এ অনেক দরকারি, কারণ এটা দিয়ে আমরা —
-
দ্রুত কিছু গণনা করতে পারি
-
সেট (set) বা mask হিসেবে সংখ্যা ব্যবহার করতে পারি
-
পারফরম্যান্স বাড়াতে পারি
চলো এখন ধাপে ধাপে বুঝে ফেলি। 👇
🧩 ১️⃣ বিটওয়াইজ অপারেটরগুলা কী?
| অপারেটর | নাম | কাজ |
|---|---|---|
& |
AND | দুই bit-ই 1 হলে 1 |
| ` | ` | OR |
^ |
XOR | দুই bit আলাদা হলে 1 |
~ |
NOT | সব bit উল্টে দেয় (1 → 0, 0 → 1) |
<< |
Left Shift | bit গুলোকে বামে সরিয়ে দেয় |
>> |
Right Shift | bit গুলোকে ডানে সরিয়ে দেয় |
🧠 ২️⃣ Bitwise কীভাবে কাজ করে?
ধরা যাক:
| Expression | Binary Result | Decimal Result | Explanation |
|---|---|---|---|
a & b |
0001 |
1 |
দুই জায়গায়ই 1 থাকলে 1 |
| `a | b` | 0111 |
7 |
a ^ b |
0110 |
6 |
ভিন্ন হলে 1 |
~a |
1010 |
-6 |
1 ↔ 0 উল্টে যায় (Two’s complement) |
a << 1 |
1010 |
10 |
সব bit এক ধাপ বামে (×2) |
a >> 1 |
0010 |
2 |
সব bit এক ধাপ ডানে (÷2) |
💡 ৩️⃣ Bitwise vs Logical Operator
| ধরন | উদাহরণ | কাজের ধরণ | ফলাফল |
|---|---|---|---|
| Logical | &&, ` |
, !` |
|
| Bitwise | &, ` |
, ^, ~` |
bit-level এ কাজ করে |
🔹 উদাহরণ:
দুইটাই দেখতে একইরকম মনে হলেও কাজ পুরো আলাদা।
🧰 ৪️⃣ বাস্তব জীবনের উদাহরণ: Permissions System 🎯
ধরো তুমি একটা সিস্টেম বানাচ্ছো যেখানে প্রতিটি user এর permission (যেমন read, write, execute) binary আকারে সংরক্ষণ করা হয়।
| Permission | Binary | Decimal |
|---|---|---|
| Read | 001 | 1 |
| Write | 010 | 2 |
| Execute | 100 | 4 |
এখন:
👉 এখন user এর permission: 7 (111)
এখন যদি চেক করতে চাও user এর write permission আছে কিনা:
✅ Output: Has Write Access
অর্থাৎ bitwise operator দিয়ে permission সিস্টেম, feature flags, mask, toggle — এসব খুব দ্রুত করা যায়।
⚡ ৫️⃣ Competitive Programming এ ব্যবহার
-
Subset Enumeration (Masking):
for (int mask = 0; mask < (1 << n); mask++) { // subset তৈরি } -
Check i-th bit is ON/OFF:
if (mask & (1 << i)) cout << "Bit " << i << " is ON\n"; -
Turn ON/OFF bits:
mask |= (1 << i); // Turn ON mask &= ~(1 << i); // Turn OFF -
Count bits:
__builtin_popcount(mask); // কতগুলো bit 1 আছে
🎯 সারসংক্ষেপ
-
Bitwise অপারেটর মানে হলো সংখ্যা কে bit ধরে কাজ করা।
-
এটা দ্রুত, powerful, আর অনেক hidden trick solve করতে সাহায্য করে।
-
CP-তে subset, mask, optimization, permission system — এসব ক্ষেত্রে খুব দরকারি।
Comments
Post a Comment