আমাদের একটি পূর্ণসংখ্যা দেওয়া হয়েছে, ধরা যাক, বাম এবং ডান মান সহ সংখ্যা এবং পরিসর। কাজটি হল প্রথমে একটি সংখ্যার বাইনারি ডিজিট গণনা করা এবং তারপরে বাম ডিজিট থেকে ডান ডিজিট পর্যন্ত লুপ সেট করা এবং তারপর প্রদত্ত রেঞ্জে আনসেট বিটগুলি গণনা করা।
একটি বাইনারি সংখ্যার আনসেট বিটগুলি 0 দ্বারা প্রতিনিধিত্ব করা হয়। যখনই আমরা একটি পূর্ণসংখ্যা মানের বাইনারি সংখ্যা গণনা করি তখন এটি 0 এবং 1 এর সমন্বয় হিসাবে গঠিত হয়। সুতরাং, 0 সংখ্যাটিকে কম্পিউটারের পরিভাষায় আনসেট বিট বলা হয়।
ইনপুট − int সংখ্যা =50, বাম =2, ডান =5
আউটপুট − একটি পরিসরে মোট আনসেট বিটের সংখ্যা হল − 2
ব্যাখ্যা −50 নম্বরের বাইনারি উপস্থাপনা হল 110010 এবং আমাদের একটি রেঞ্জ আছে বাম থেকে শুরু হচ্ছে =2 যার বিট 1 এবং ডানে শেষ হচ্ছে =5 যার বিট 1 রয়েছে এবং রেঞ্জের মধ্যে আমাদের দুটি 0 আছে। সুতরাং আনসেট বিটের সংখ্যা হল 2।
ইনপুট − int সংখ্যা =42, বাম =1, ডান 6
আউটপুট − একটি পরিসরে মোট আনসেট বিটের সংখ্যা হল −3
ব্যাখ্যা − একটি সংখ্যা 42-এর বাইনারি উপস্থাপনা হল 101010 এবং আমাদের একটি ব্যাপ্তি রয়েছে বাম থেকে শুরু হচ্ছে =1 যার বিট 1 হিসাবে রয়েছে এবং ডানদিকে শেষ হচ্ছে =6 যার বিট 0 রয়েছে এবং ব্যাপ্তির মধ্যে আমাদের তিনটি 0 রয়েছে। সুতরাং গণনা হল 3।
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
পূর্ণসংখ্যার প্রকারের একটি ভেরিয়েবল এবং বাম এবং ডান পূর্ণসংখ্যার মান সহ পরিসীমা ইনপুট করুন৷
-
আনসাইনড ইন্টের সেট বিটের মোট গণনা সংরক্ষণ করতে একটি পরিবর্তনশীল গণনা ঘোষণা করুন
-
i থেকে 1<<7 এবং i> 0 এবং i থেকে i / 2
থেকে FOR লুপ শুরু করুন -
লুপের ভিতরে, num &1 ==TRUE চেক করুন তারপর প্রিন্ট করুন 1 অন্য প্রিন্ট 0
-
i থেকে বামে ডান মান পর্যন্ত লুপ FOR শুরু করুন
-
লুপের ভিতরে, প্রদত্ত ব্যাপ্তির মধ্যে সংখ্যার মোট সংখ্যা বাড়ান
-
সংখ্যা 0 না হওয়া পর্যন্ত বিটের মোট গণনা গণনা করার সময় লুপ শুরু করুন
-
লুপের ভিতরে, গণনা =গণনা + সংখ্যা এবং 1 এবং নম্বর সেট করুন>>=1
-
একটি অস্থায়ী ভেরিয়েবল সেট করুন আসুন বলি, a এর সাথে ((1 <<ডান) - 1) ^ ((1 <<(বাম - 1)) - 1);
-
এছাড়াও, গণনা এবং a
সহ গণনা সেট করুন -
শেষ পর্যন্ত, একটি পরিসরে বিটের মোট সংখ্যা হিসাবে গণনা সেট করুন - একটি পরিসরে সেট বিটের মোট সংখ্যা৷
উদাহরণ
#include<iostream>
using namespace std;
//Count total unset bits in a range
unsigned int unset_bits(unsigned int number, unsigned int left, unsigned int right){
unsigned int count = 0;
unsigned int total_bits = 0;
unsigned i;
//display the 8-bit number
cout<<"8-bit number of "<<number<<" is: ";
for (i = 1 << 7; i > 0; i = i / 2){
(number & i)? cout<<"1": cout<<"0";
}
//calculate total number of bits in a given range
for(i = left; i<=right; i++){
total_bits++;
}
//calculate the total bits in a number
while (number){
count += number & 1;
number >>= 1;
}
//calculate the set bit in a range
int a = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1);
count = count & a;
//subtract set bits from the total bits in a range
count = total_bits - count;
cout<<"\nCount of total unset bits in a range are: "<<count;
}
int main(){
unsigned int number = 80;
unsigned int left = 1, right = 4;
unset_bits(number, left, right);
return 0;
} আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবে8-bit number of 80 is: 01010000 Count of total unset bits in a range are: 2