C/C++ এ bitwise operators সম্পর্কে যা কিছু জানার আছে – part 1


আসসালামু আলাইকুম। আশা করি ট্রিকবিডির বন্ধুগণ সবাই ভালো আছেন। আজকে আরেকটি নতুন পোস্ট নিয়ে আসলাম আপনাদের মাঝে।

আজকের পোষ্টের বিষয়টি হলো: C/C++ এ bitwise operator সম্পর্কে যা কিছু জানার আছে তা নিয়ে হবে আমাদের আজকের আলোচনা। হয়তো এ নিয়ে আগেও পোস্ট হয়েছে, কিন্তু আমি আমার নিজের মতো করে এ বিষয়টির A-Z বোঝানোর চেষ্টা করবো। C/C++ এ Bitwise Operator মোট ৬ টি। তারমধ্যে ৩ টি নিয়ে আমরা আজকে আলোচনা করবো। বাকি তিনটির মধ্যে একটি হলো Not Bitwise Operator যেটি আলোচনা করতে আরো কিছু বিষয় নিয়ে আলোচনা করতে হবে তাই এক part এ লিখলে পোস্ট বেশি বড় হয়ে যাবে। তাই আজকে শুধু প্রথম ৩ টি bitwise operator নিয়ে আলোচনা করবো। তো চলুন শুরু করা যাক।

 

C/C++ এ bitwise operator গুলো একইভাবে কাজ করে। তাই আমি এখানে কোডের এক্সাম্পল হিসেবে C++ ইউজ করবো।

 

C/C++ এ bitwise operator আছে মোট ৬ টি যেগুলো হলো:

১. AND Bitwise Operator &

২. OR Bitwise Operator |

৩. XOR Bitwise Operator ^

৪. Leftshift Bitwise Operator <<

৫. Rightshift Bitwise Operator >>

৬. NOT Bitwise Operator !

 

Bitwise Operator সম্পর্কে ভালোভাবে বুঝতে হলে আগে আপনাকে বাইনারি কিভাবে কাজ করে এ বিষয়ে ধারণা থাকতে হবে। প্রথম তিনটি শিখতে আর তেমন কিছু জানা থাকা লাগবে না, আর পরের তিনটি শিখতে যা জানা লাগবে তা আমি পরের পোস্টে অ্যাড করে দিবো ইনশাআল্লাহ।

 

আজকে আমাদের আলোচনা প্রথম ৩ টি নিয়ে। চলুন শুরু করা যাক।

 

বি:দ্র: এই পোস্টটি বোঝার জন্য আপনার অপারেটর, এক্সপ্রেশন ইত্যাদি বিষয়ে ধারণা থাকলে ভালো হয়, তবে না থাকলেও মেইন কনসেপ্টটা বোঝার কথা।

 

১.AND Operator:

AND অপারেটর বিট লেভেলে দুইটি ভ্যালুর বাইনারি মানের মধ্যে AND অপারেশন করে। এটি bit-by-bit অর্থাৎ একটি bit এর সাথে আরেকটি bit এর মাঝে সম্পন্ন হয়। এখন এই AND অপারেশন টা কি? “যদি দুইটি ভ্যালুর মধ্যে দুইটির মানই true হয় তাহলে AND অপারেটর true রিটার্ন করবে, যদি দুইটিই false হয় তাহলে AND অপারেটর false রিটার্ন করবে আর যদি একটি true ও আরেকটি false হয় তাহলে AND অপারেটর false রিটার্ন করবে, এটাই হলো AND অপারেশন।” বিট লেভেলে সংখ্যা আছে দুইটি: 0 এবং 1. এর মধ্যে 0 সর্বদা false রিটার্ন করে আর 1 সর্বদা true রিটার্ন করে। সহজ ভাষায়, 0 মানে false আর 1 মানে true. তারমানে 1(true) আর 0(false) এর মধ্যে AND অপারেশন এর রেজাল্ট হবে 0(false). 1 আর 1 এর মধ্যে AND অপারেশন এর রেজাল্ট হবে 1. 0 আর 0 এর মধ্যে AND অপারেশনের রেজাল্ট হবে 0.

 

নিচের ডায়াগ্রাম টি দেখুন, তাহলে অনেক সহজে বুঝতে পারবেন।

নিচের কোড টির মাধ্যমে আপনি আপনার প্রোগ্রামে এটি টেস্ট করে দেখুন:

#include<iostream>
int main(){
std::cout << (3 & 4) << std::endl;
return 0;
}

এখানে 3 আর 4 এর মধ্যে AND অপারেশন করা হয়েছে। যেহেতু AND অপারেটর বিট লেভেলে কাজ করে তাই 3 আর 4 এর বাইনারি মানের মধ্যে AND অপারেশন হবে। 3 এর বাইনারি মান 11. 4 এর বাইনারি মান 100. এদের মধ্যে AND অপারেশন হলে হবে:

00000011 & 00000100 = 00000000

তাই 3 & 4 = 0.

 

২.OR Operator:

OR অপারেটর ও একইভাবে বিট লেভেলে দুইটি ভ্যালুর বাইনারি মানের মধ্যে OR অপারেশন করে। “যদি দুইটি ভ্যালুর মধ্যে দুইটির মানই true হয় তাহলে OR অপারেটর true রিটার্ন করবে, যদি দুইটিই false হয় তাহলে OR অপারেটর false রিটার্ন করবে আর যদি একটি true ও আরেকটি false হয় তাহলেও OR অপারেটর true রিটার্ন করবে, এটাই হলো OR অপারেশন।” আগেই বলছি, 0 মানে false আর 1 মানে true. তারমানে 1(true) আর 0(false) এর মধ্যে OR অপারেশন এর রেজাল্ট হবে 1(true). 1 আর 1 এর মধ্যে OR অপারেশন এর রেজাল্ট হবে 1. 0 আর 0 এর মধ্যে OR অপারেশনের রেজাল্ট হবে 0.

 

নিচের ডায়াগ্রাম টি দেখুন।

কোড এক্সাম্পল:

#include
int main(){
std::cout << (3 | 4) << std::endl;
return 0;
}

এখানে 3 আর 4 এর মধ্যে OR অপারেশন করা হয়েছে। OR অপারেটরও বিট লেভেলে কাজ করে(সব bitwise অপারেটরই বিট লেভেলে কাজ করে) তাই 3 আর 4 এর বাইনারি মানের মধ্যে OR অপারেশন হবে। 3 এর বাইনারি মান 11. 4 এর বাইনারি মান 100. এদের মধ্যে OR অপারেশন হলে হবে:

00000011 | 00000100 = 00000111; যা 7 এর বাইনারি মান।

তাই 3 | 4 = 7.

 

৩.XOR/Exclusively OR Operator:

এটি OR অপারেটর এর মতই, তবে একটু ভিন্নতা আছে। এক্ষেত্রে যদি দুইটি মান একই হয় তাহলে রেজাল্ট হবে false আর যদি ভিন্ন হয় তাহলে রেজাল্ট হবে true. সুতরাং, “যদি দুইটি ভ্যালুর মধ্যে দুইটির মানই true হয় তাহলে XOR অপারেটর false রিটার্ন করবে, যদি দুইটিই false হয় তাহলে XOR অপারেটর false রিটার্ন করবে আর যদি একটি true ও আরেকটি false হয় তাহলে XOR অপারেটর true রিটার্ন করবে, এটাই হলো XOR অপারেশন।” অর্থাৎ, OR অপারেটর এর সাথে এর পার্থক্য হলো: এখানে দুইটি ভ্যালুর মান true হলেও XOR অপারেশনের রেজাল্ট false হবে।তারমানে 1(true) আর 0(false) এর মধ্যে XOR অপারেশন এর রেজাল্ট হবে 1(true). 1 আর 1 এর মধ্যে OR অপারেশন এর রেজাল্ট হবে 0. 0 আর 0 এর মধ্যে OR অপারেশনের রেজাল্ট হবে 0.

 

XOR এর ডায়াগ্রাম:

কোড এক্সাম্পল:

#include
int main(){
std::cout << (3 ^ 4) << std::endl;
std::cout << (2 ^ 3) << std::endl;
return 0;
}

এখানে 3 আর 4 এর মধ্যে XOR অপারেশন করা হয়েছে। 3 আর 4 এর বাইনারি মানের মধ্যে XOR অপারেশন হবে। 3 এর বাইনারি মান 11. 4 এর বাইনারি মান 100. এদের মধ্যে XOR অপারেশন হলে হবে:

00000011 ^ 00000100 = 00000111; যা 7 এর বাইনারি মান।

তাই 3 ^ 4 = 7.

 

আবার 2 ও 3 এর মধ্যে XOR অপারেশন করা হয়েছে। 2 এর বাইনারি মান 10. 3 এর বাইনারি মান 11. এদের মধ্যে XOR অপারেশন হলে হবে:

00000010 ^ 00000011 = 00000001; যা 1 এর বাইনারি মান।

তাই 2 ^ 3 = 1.

 

তো আজকে এই পর্যন্তই। পরের পার্ট এ বাকি তিনটি Bitwise Operator নিয়ে আলোচনা করবো ইনশআল্লাহ। আজকের পোস্ট অলরেডি অনেক টাই বড় হয়ে গেছে। একটু ধৈর্য নিয়ে পড়বেন, কঠিন কিছু না। আর এটা তো বেসিক, bitwise operator অনেক কমপ্লেক্স সফটওয়্যার এ ব্যবহৃত হয়। এগুলা না শিখলে ওগুলো বোঝা সম্ভব নয়।

 

আজকে এখানেই শেষ করলাম। সবাই ভালো থাকবে

ন, সুস্থ থাকবেন আর ফিলিস্তিনে আমাদের ভাইদের জন্য দোয়া করবেন। ধন্যবাদ।



Leave a Reply

Your email address will not be published. Required fields are marked *