C++-এ & সিম্বলটি একটি অপারেটর হিসেবে ব্যবহৃত হয়। এটি দুটি ভিন্ন জায়গায় ব্যবহৃত হয়: একটি হিসেবে বিটওয়াইজ AND অপারেটর এবং অন্যটি হিসেবে পয়েন্টার অ্যাড্রেস-অফ অপারেটর।
বিটওয়াইজ AND (Bitwise AND)
বিটওয়াইজ AND অপারেটর (&) প্রথম অপারেন্ডের প্রতিটি বিটকে দ্বিতীয় অপারেন্ডের সংশ্লিষ্ট বিটের সাথে তুলনা করে। যদি দুটি বিটই ১ হয়, তবে রেজাল্ট বিটটি ১ সেট হয়। অন্যথায়, রেজাল্ট বিটটি ০ সেট হয়। বিটওয়াইজ AND অপারেটরের দুটি অপারেন্ড অবশ্যই ইন্টিগ্রাল টাইপের হতে হবে।
উদাহরণ
#include <iostream>
using namespace std;
int main() {
unsigned short a = 0x5555; // প্যাটার্ন 0101 ...
unsigned short b = 0xAAAA; // প্যাটার্ন 1010 ...
cout << hex << (a & b) << endl;
}
আউটপুট
0
অ্যাড্রেস-অফ অপারেটর (Address Of Operator)
C++-এ দুটি পয়েন্টার অপারেটর আছে: অ্যাড্রেস-অফ অপারেটর (&) এবং ইন্ডিরেকশন অপারেটর (*)।
একটি পয়েন্টার হলো একটি ভেরিয়েবল যা অন্য একটি ভেরিয়েবলের ঠিকানা ধারণ করে। অর্থাৎ, যেই ভেরিয়েবল অন্য একটি ভেরিয়েবলের ঠিকানা ধারণ করে, সেটি ওই ভেরিয়েবলকে "পয়েন্ট টু" করে বলে। একটি ভেরিয়েবল যেকোনো ডেটা টাইপের হতে পারে—অবজেক্ট, স্ট্রাকচার, বা আবার পয়েন্টারও।
& অপারেটরটি একটি যুনারি অপারেটর যা তার অপারেন্ড দ্বারা নির্দিষ্ট ভেরিয়েবলের ঠিকানা (r-value) রিটার্ন করে। এটি * অপারেটরের কমপ্লিমেন্ট। উদাহরণস্বরূপ:
উদাহরণ
#include <iostream>
using namespace std;
int main() {
int var;
int *ptr;
int val;
var = 3000;
// var-এর ঠিকানা নিন
ptr = &var;
// ptr-এ উপলব্ধ মান নিন
val = *ptr;
cout << "Value of var :" << var << endl;
cout << "Value of ptr :" << ptr << endl;
cout << "Value of val :" << val << endl;
return 0;
}
আউটপুট
Value of var :3000 Value of ptr :0xbff64494 Value of val :3000