কম্পিউটার টিউটোরিয়াল

C++-এ শিফ্ট অপারেটর (Shift Operators) কী?


বিটওয়াইজ শিফ্ট অপারেটর দুটি: রাইট-শিফ্ট অপারেটর (>>), যা shift_expression-এর বিটগুলো ডানে শিফ্ট করে, এবং লेफট-শিফ্ট অপারেটর (<<), যা shift_expression-এর বিটগুলো বামে শিফ্ট করে।

লেফট-শিফ্ট অপারেটর shift_expression-এর বিটগুলো additive_expression দ্বারা নির্দিষ্ট সংখ্যক পজিশন বামে শিফ্ট করে। শিফ্ট অপারেশন দিয়ে যেসব বিট পজিশন খালি হয় সেগুলো শূন্য দিয়ে পূরণ করা হয়। একটি লেফট শিফ্ট হলো একটি লজিক্যাল শিফ্ট (শিফ্ট হওয়া বিটগুলো ডিসকার্ড হয়, সাইন বিটসহ)।

রাইট-শিফ্ট অপারেটর shift_expression-এর বিট প্যাটার্ন additive_expression দ্বারা নির্দিষ্ট সংখ্যক পজিশন ডানে শিফ্ট করে। আনসাইনড নাম্বারের জন্য, শিফ্ট অপারেশন দিয়ে খালি হওয়া বিট পজিশনগুলো শূন্য দিয়ে পূরণ করা হয়। সাইনড নাম্বারের জন্য, সাইন বিট ব্যবহার করা হয় খালি বিট পজিশন পূরণের জন্য। অর্থাৎ, যদি সংখ্যাটি পজিটিভ হয়, ০ ব্যবহার করা হয়, এবং যদি নেগেটিভ হয়, ১ ব্যবহার করা হয়।

উদাহরণ

#include <iostream>
using namespace std;
int main() {
    int a = 1, b = 3;
    // a এখন 00000001
    // ৩ দিয়ে লেফট শিফ্ট করলে হবে 00001000, অর্থাৎ ৮
    a = a << 3;
    cout << a << endl;
    // ২ দিয়ে রাইট শিফ্ট করলে হবে 00000010, অর্থাৎ ২
    a = a >> 2;
    cout << a << endl;
    return 0;
}

আউটপুট

8
2

নোট: এই অপারেটরগুলো নেগেটিভ নাম্বারের সাথে খুব ভিন্নভাবে behave করে। একটি সাইনড নেগেটিভ নাম্বারের রাইট-শিফ্টের রেজাল্ট ইমপ্লিমেন্টেশন-ডিপেন্ডেন্ট। আপনি যদি একটি সাইনড নাম্বার এতটুকু লেফট-শিফ্ট করেন যে সাইন বিটটি প্রভাবিত হয়, তবে রেজাল্ট অনডিফাইনড।

এছাড়া দুটি কমপাউন্ড অপারেটর আছে যেগুলো লেফট সাইডের ভেরিয়েবলে সরাসরি মান অ্যাসাইন করতে ব্যবহৃত হয়: <<= অপারেটর এবং >>= অপারেটর।

শিফ্ট অপারেটর সম্পর্কে আরও বিস্তারিত জানতে এখানে দেখুন।


  1. C#-তে বিটওয়াইজ অপারেটরগুলো কী?

  2. C#-তে ארিথমেটিক (Arithmetic) অপারেটরগুলো

  3. C#-তে অ্যাসাইনমেন্ট (Assignment) অপারেটরগুলো

  4. C#-এ লেফট শিফট এবং রাইট শিফট অপারেটর (>> এবং <<) কী?