কম্পিউটার

C++ এ একটি পরিসরে সেট বিট গণনা করুন


আমাদের একটি পূর্ণসংখ্যা দেওয়া হয়েছে, ধরা যাক, সংখ্যা এবং বাম এবং ডান মানের সাথে পরিসর। কাজটি হল প্রথমে একটি সংখ্যার বাইনারি ডিজিট গণনা করা এবং তারপরে বাম ডিজিট থেকে ডান ডিজিট পর্যন্ত লুপ সেট করা এবং তারপর প্রদত্ত রেঞ্জে সেট বিটগুলি গণনা করা।

একটি বাইনারি সংখ্যার সেট বিটগুলি 1 দ্বারা প্রতিনিধিত্ব করা হয়। যখনই আমরা একটি পূর্ণসংখ্যা মানের বাইনারি সংখ্যা গণনা করি তখন এটি 0 এবং 1 এর সমন্বয় হিসাবে গঠিত হয়। সুতরাং, 1 সংখ্যাটি কম্পিউটারের পরিভাষায় সেট বিট হিসাবে পরিচিত।

ইনপুট − int সংখ্যা =50, বাম =2, ডান =5

আউটপুট − একটি পরিসরে মোট সেট বিটের সংখ্যা হল − 2

ব্যাখ্যা -:একটি সংখ্যা 50 এর বাইনারি উপস্থাপনা হল 110010 এবং আমাদের একটি রেঞ্জ আছে বাম থেকে শুরু হচ্ছে =2 যার বিট 1 এবং ডানদিকে শেষ হচ্ছে =5 যার বিট 1 রয়েছে এবং রেঞ্জের মধ্যে আমাদের রয়েছে শুধুমাত্র 0’স। সুতরাং গণনা হল 2।

ইনপুট − int সংখ্যা =42, বাম =3, ডান 4

আউটপুট − একটি পরিসরে মোট সেট বিটের সংখ্যা হল − 1

ব্যাখ্যা − একটি সংখ্যা 42 এর বাইনারি উপস্থাপনা হল 101010 এবং আমাদের একটি ব্যাপ্তি রয়েছে বাম থেকে শুরু হচ্ছে =3 যার বিট 1 হিসাবে রয়েছে এবং ডানদিকে শেষ হচ্ছে =4 যার বিট 0 রয়েছে এবং পরিসরের মধ্যে আমাদের কেবল একটি সংখ্যা রয়েছে। সুতরাং গণনা হল 1।

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • পূর্ণসংখ্যার প্রকারের একটি ভেরিয়েবল এবং বাম এবং ডান পূর্ণসংখ্যার মান সহ পরিসীমা ইনপুট করুন৷

  • আনসাইনড ইন্টের সেট বিটের মোট গণনা সংরক্ষণ করতে একটি পরিবর্তনশীল গণনা ঘোষণা করুন

  • i থেকে 1<<7 এবং i> 0 এবং i থেকে i / 2

    থেকে FOR লুপ শুরু করুন
  • লুপের ভিতরে, num &1 ==TRUE চেক করুন তারপর প্রিন্ট করুন 1 অন্য প্রিন্ট 0

  • সংখ্যা 0 না হওয়া পর্যন্ত বিটের মোট গণনা গণনা করার সময় লুপ শুরু করুন

  • লুপের ভিতরে, গণনা =গণনা + সংখ্যা এবং 1 এবং নম্বর সেট করুন>>=1

  • একটি অস্থায়ী ভেরিয়েবল সেট করুন আসুন বলি, a এর সাথে ((1 <<ডান) - 1) ^ ((1 <<(বাম - 1)) - 1);

  • এছাড়াও, গণনা এবং a

    সহ গণনা সেট করুন
  • গণনা প্রিন্ট করুন

উদাহরণ

#include<iostream>
using namespace std;
//Count total bits in a range
unsigned int bits(unsigned int number, unsigned int left, unsigned int right){
   unsigned int count = 0;
   unsigned i;
   //display the total 8-bit number
   cout<<"8-bit digits of "<<number<<" is: ";
   for (i = 1 << 7; i > 0; i = i / 2){
      (number & i)? cout<<"1": cout<<"0";
   }
   //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;
   cout<<"\nCount of total set bits in a range are: "<<count;
}
int main(){
   unsigned int number = 42;
   unsigned int left = 2, right = 5;
   bits(number, left, right);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
8-bit digits of 42 is: 00101010
Count of total set bits in a range are: 2

  1. সি-তে ফ্লোটিং পয়েন্ট নম্বরে সেট বিটগুলি কীভাবে গণনা করবেন?

  2. C++ এ সেট বিটের বিজোড় সংখ্যা সহ পূর্ণসংখ্যার সংখ্যা

  3. C++ এ একই সংখ্যক সেট বিট সহ পরবর্তী উচ্চতর সংখ্যা

  4. একটি সেটকে C++-এ k উপসেটে ভাগ করার উপায় গণনা করুন