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

C++-এ বিট রেঞ্জে সেট বিট গণনা: মাস্কিং টেকনিক

একটি পূর্ণসংখ্যা num এবং একটি বিট রেঞ্জ [left, right] দেওয়া আছে। বাইনারি রিপ্রেজেন্টেশনে এই রেঞ্জে কতটি সেট বিট (১) আছে তা বের করুন।

উদাহরণ

num=50 (110010), left=2, right=5

বিট পজিশন (LSB=1): 1:0, 2:1, 3:0, 4:0, 5:1, 6:1

রেঞ্জ 2-5: বিটগুলো = 1,0,0,1 → ২টি সেট বিট

মাস্কিং টেকনিক

  1. রেঞ্জ মাস্ক তৈরি: mask = ((1 << right) - 1) ^ ((1 << (left-1)) - 1)
  2. num & mask করলে শুধু রেঞ্জের বিটগুলো থাকবে।
  3. পপকাউন্ট (set bit count) করুন।

C++ বাস্তবায়ন


#include 
using namespace std;

unsigned int bitsInRange(unsigned int num, unsigned int left, unsigned int right) {
    // 8-বিট প্রিন্ট
    cout << "Binary: ";
    for (int i = 7; i >= 0; i--)
        cout << ((num >> i) & 1);
    cout << endl;
    
    // রেঞ্জ মাস্ক
    unsigned int mask = ((1u << right) - 1) ^ ((1u << (left - 1)) - 1);
    unsigned int masked = num & mask;
    
    // পপকাউন্ট
    int count = __builtin_popcount(masked);
    return count;
}

int main() {
    unsigned int num = 42, left = 2, right = 5;
    cout << "Set bits in range: " << bitsInRange(num, left, right);
    return 0;
}

দ্রষ্টব্য

  • LSB = পজিশন ১ (নয় ০)
  • __builtin_popcount GCC-এ বিল্ট-ইন ফাংশন
  • অনসাইনড ইন্ট ব্যবহার করলে শিফটিং সেফ
  1. C-এ ফ্লোটিং পয়েন্ট সংখ্যার সেট বিট গণনা করা

  2. C++-এ অড্ড সেট বিট থাকা ইন্টিজার সংখ্যা গণনা

  3. সি++-এ একই সেট বিট সংখ্যক পরবর্তী বড় সংখ্যা বের করা

  4. C++-এ একটি সেটকে k সাবসেটে ভাগ করার পদ্ধতির সংখ্যা গণনা