কম্পিউটার

C++ এ রিভার্স বিট


ধরুন আমাদের কাছে একটি স্বাক্ষরবিহীন সংখ্যা x আছে, এবং আমরা সহজেই এটির বাইনারি উপস্থাপনা খুঁজে পেতে পারি (32 বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা)। আমাদের কাজ বিট বিপরীত হয়. তাই যদি বাইনারি উপস্থাপনা 00000000000000000000001001110100 এর মত হয়, তাহলে বিপরীত বিটগুলি হবে 001011100100000000000000000000000। তাই আমাদেরকে প্রকৃত সংখ্যা রিটার্ন করতে হবে রিবিট এর পরে।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • ধরুন n হল প্রদত্ত সংখ্যা
  • উত্তর দিন :=0
  • এর জন্য i :=31 নিচে 0:
    • উত্তর :=উত্তর OR (n AND i), এবং এটিকে i বার বাম দিকে সরান
    • n :=n ডানে 1 বিট স্থানান্তরের পরে
  • উত্তর ফেরত দিন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   uint32_t reverseBits(uint32_t n) {
      uint32_t ans = 0;
      for(int i = 31; i >= 0; i--){
         ans |= (n & 1) <<i;
         n>>=1;
      }
      return ans;
   }
};
main(){
   Solution ob;
   cout << ob.reverseBits(0b00000000000000000000001001110100);
}

ইনপুট

0b00000000000000000000001001110100

আউটপুট

775946240

  1. C++ STL-এ বিপরীত ফাংশন তালিকাভুক্ত করুন

  2. C/C++ এ একটি স্ট্রিং বিপরীত করুন

  3. C++ প্রোগ্রাম একটি নম্বর বিপরীত করতে

  4. পাইথন প্রোগ্রাম একটি ইতিবাচক পূর্ণসংখ্যা সংখ্যার বিট বিপরীত?