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

C++-এ একটি রেঞ্জের বিটওয়াইজ AND


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

উদাহরণ দিয়ে বুঝি,

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

আউটপুট − 0

ব্যাখ্যা − 3 & 4 & 5 & 6 & 7 & 8 = 0

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

আরো দক্ষ সমাধান,

এটি একটি আরও দক্ষ সমাধান, যা নিচের ধাপগুলো দিয়ে করা যায় −

স্টেপ ১ − b-এর LSB ফ্লিপ করুন।

স্টেপ ২ − নম্বরটি a এবং b-এর সাথে তুলনা করুন, চেক করুন এটি রেঞ্জে আছে কিনা,

স্টেপ ২.১ − যদি নম্বরটি a-র চেয়ে বড় হয়, এর LSB আবার ফ্লিপ করুন।

স্টেপ ২.২ − যদি না হয় তবে নম্বরটি = রেজাল্ট।

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

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

সমাধান −

স্টেপ ১ − 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. C++-এ বিটওয়াইজ AND (Bitwise AND) কী?