একটি পূর্ণসংখ্যা 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 → ২টি সেট বিট
মাস্কিং টেকনিক
- রেঞ্জ মাস্ক তৈরি:
mask = ((1 << right) - 1) ^ ((1 << (left-1)) - 1) num & maskকরলে শুধু রেঞ্জের বিটগুলো থাকবে।- পপকাউন্ট (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_popcountGCC-এ বিল্ট-ইন ফাংশন- অনসাইনড ইন্ট ব্যবহার করলে শিফটিং সেফ