কম্পিউটার

C++ এ একটি রেঞ্জের বিটওয়াইজ এবং (বা &)


এই সমস্যায়, আমাদের দুটি পূর্ণসংখ্যার মান দেওয়া হয়েছে a এবং b। এবং আমাদের কাজ হল a থেকে b এর bitwise এবং (&) রেঞ্জ খুঁজে বের করা . এর মানে আমাদের a &a+1 &a+2 &… b-1 &b-এর মান খুঁজে বের করতে হবে।

সমস্যাটি বোঝার জন্য একটি উদাহরণ দেওয়া যাক,

ইনপুট − a =3 , b =8

আউটপুট − 0

ব্যাখ্যা3 এবং 4 এবং 5 এবং 6 এবং 7 এবং 8 =0

সমস্যা সমাধানের জন্য, একটি সহজ সমাধান হল a থেকে শুরু করে বিটওয়াইজ এবং সমস্ত সংখ্যার একটি থেকে b বাড়িয়ে।

আরও কার্যকর সমাধান,

এটি একটি আরও কার্যকর সমাধান, এটি −

ব্যবহার করে করা যেতে পারে

পদক্ষেপ1 − b এর LSB ফ্লিপ করুন।

ধাপ ২ − সংখ্যাটি a এবং b এর সাথে তুলনা করুন, এটি পরিসরে আছে কিনা তা পরীক্ষা করুন,

ধাপ 2.1৷ − যদি সংখ্যাটি একটি ফ্লিপের চেয়ে বেশি হয় তবে এর LSB লাভ।

ধাপ 2.2৷ - যদি এটি একটি থেকে বড় না হয় তাহলে সংখ্যা =ফলাফল৷

এখন, চলুন কাজ করার ক্ষেত্রে উপরের অ্যালগরিদমটি দেখুন −

উদাহরণ − a =3 এবং b =8।

সমাধান

পদক্ষেপ1 − b =8 (1000), ফ্লিপিং LSB যা সংখ্যার মধ্যে একমাত্র। সংখ্যাটি হয়ে যায় 0000 অর্থাৎ 0

ধাপ ২ − 0 হল 3 থেকে কম, 0 হল ফলাফল৷

উদাহরণ

এখন, সমস্যা সমাধানের কোডটি দেখি,

#include <stdio.h>
int main(){
   long a, b;
   a = 3; b = 8;
   do{
      b -= (b & -b);
   }while(a < b);
   printf("%li", b);
}

আউটপুট

0

  1. Go এবং C++ এর মধ্যে পার্থক্য।

  2. ন্যূনতম ধনাত্মক পূর্ণসংখ্যা C দ্বারা বিভাজ্য এবং C++ এ পরিসীমা [A, B] এর মধ্যে নয়

  3. সর্বাধিক ধনাত্মক পূর্ণসংখ্যা C দ্বারা বিভাজ্য এবং C++ এ [A, B] পরিসরে রয়েছে

  4. Bitwise এবং C++ এ কি?