যা আমরা জানি, বিটওয়াইজ AND (bitwise AND) কে & দিয়ে প্রতীকী করা হয় এবং লজিক্যাল AND অপারেটর (logical AND operator) কে && দিয়ে। তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। এগুলো নিচে দেওয়া হলো:
- লজিক্যাল AND অপারেটর বুলিয়ান এক্সপ্রেশন (Boolean expressions)-এর ওপর কাজ করে এবং শুধু বুলিয়ান ভ্যালু (Boolean values) রিটার্ন করে। বিটওয়াইজ AND অপারেটর ইন্টিজার (integer), শর্ট ইন্ট (short int), লং (long), আনসাইন্ড ইন্ট (unsigned int) টাইপ ডেটা-র ওপর কাজ করে এবং সেই টাইপের ডেটা রিটার্ন করে।
উদাহরণ (C++ প্রোগ্রাম)
#include <iostream>
using namespace std;
int main() {
int x = 3; // ...0011
int y = 7; // ...0111
if (y > 1 && y > x)
cout << "y is greater than 1 AND x" << endl;
int z = x & y; // 0011
cout << "z = " << z;
}
আউটপুট (Output)
y is greater than 1 AND x z = 3
&&অপারেটর দ্বিতীয় অপারেন্ড ইভ্যালুয়েট (evaluate) করে না যদি প্রথম অপারেন্ড false হয়। একইভাবে,||অপারেটর দ্বিতীয় অপারেন্ড ইভ্যালুয়েট করে না যদি প্রথমটি true হয়। কিন্তু বিটওয়াইজ অপারেটর যেমন&এবং|সবসময় তাদের অপারেন্ডগুলো ইভ্যালুয়েট করে।
উদাহরণ (C++ প্রোগ্রাম)
#include <iostream>
using namespace std;
int main() {
int x = 0;
cout << (x && printf("Test using && ")) << endl;
cout << (x & printf("Test using & "));
}
আউটপুট (Output)
0 Test using & 0
ব্যাখ্যা: প্রথমে x && printf(...) এ x হল ০ (false), তাই শর্ট-সার্কিট (short-circuit) হওয়ায় printf কল হয় না, আউটপুট ০। দ্বিতীয়ে x & printf(...) এ বিটওয়াইজ AND হলে দুটি অপারেন্ডই ইভ্যালুয়েট হয়, তাই printf এক্সিকিউট হয় এবং "Test using & " প্রিন্ট হয়, এর রিটার্ন ভ্যালু (ক্যারেক্টার কাউন্ট) & অপারেশনে অংশ নেয়, ফাইনাল রেজাল্ট ০।
মূল পার্থক্য সারসংক্ষেপ:
| বিষয় | লজিক্যাল AND (&&) | বিটওয়াইজ AND (&) |
|---|---|---|
| অপারেন্ড টাইপ | বুলিয়ান/পয়েন্টার | ইন্টিজার টাইপ |
| রিটার্ন টাইপ | বুলিয়ান (0/1) | ইন্টিজার |
| শর্ট-সার্কিট | হ্যাঁ (দ্বিতীয় অপারেন্ড স্কিপ হতে পারে) | না (দুইটোই ইভ্যালুয়েট হয়) |
| ব্যবহার | কন্ডিশন চেক | বিট ম্যানিপুলেশন |