একটি ঋণাত্মক নন-নেগেটিভ পূর্ণসংখ্যা n দেওয়া আছে। লক্ষ্য হল n-এর বিটগুলো রিভার্স করে ফলাফল সংখ্যাটি রিপোর্ট করা। বিট রিভার্স করার সময় পূর্ণসংখ্যার প্রকৃত বাইনারি রূপ ব্যবহার করা হয়; কোনো লিডিং ০ বিবেচনা করা হয় না।
বিভিন্ন ইনপুট-আউটপুট পরিস্থিতি
উদাহরণ ১
ইনপুট: 13
আউটপুট: দেওয়া সংখ্যার প্রকৃত বিট রিভার্স 11
(13)₁₀ = (1101)₂. বিটগুলো রিভার্স করার পর: (1011)₂ = (11)₁₀.
ব্যাখ্যা: ইনপুট নম্বর থেকে বাইনারি বিটগুলো বের করা হয়, সেগুলো রিভার্স করা হয় এবংสุดে ডেসিমাল ফরম্যাটে কনভার্ট করে আউটপুট হিসেবে ফেরত দেওয়া হয়।
উদাহরণ ২
ইনপুট: 18
আউটপুট: দেওয়া সংখ্যার প্রকৃত বিট রিভার্স 9
(18)₁₀ = (10010)₂. বিটগুলো রিভার্স করার পর: (1001)₂ = (9)₁₀.
ব্যাখ্যা: ইনপুট নম্বর থেকে বাইনারি বিটগুলো বের করা হয়, সেগুলো রিভার্স করা হয় এবংสุดে ডেসিমাল ফরম্যাটে কনভার্ট করে আউটপুট হিসেবে ফেরত দেওয়া হয়।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- main মেথডের ভিতরে:
- সংখ্যা ইনপুট নেওয়া হয় এবং reverseBinaryBits(int input) মেথডে পাস করা হয়।
- reverseBinaryBits(int input) মেথডের ভিতরে:
- rev_input ভেরিয়েবল রিভার্সড বিট সংরক্ষণের জন্য ইনিশিয়ালাইজ করা হয়।
- (input > 0) ব্রেকিং পয়েন্টসহ একটি লুপ ইটারেট করা হয় (ডানদিক থেকে ট্রাভার্স করছি)।
- লুপের ভিতরে:
- বাইটওয়াইজ রাইট শিফট অপারেশন ব্যবহার করে n-এর বাইনারি রিপ্রেজেন্টেশন থেকে এক-এক করে বিট বের করা হয়।
- বাইটওয়াইজ লেফট শিফট অপারেশন ব্যবহার করে সেগুলো rev-এ জমা করা হয়।
উদাহরণ কোড
class TutorialsPoint {
public static int reverseBinaryBits(int input) {
int rev_input = 0;
while (input > 0) {
rev_input <<= 1;
if ((int) (input & 1) == 1) {
rev_input ^= 1;
}
input >>= 1;
}
return rev_input;
}
public static void main(String[] args) {
int input = 13;
System.out.println("Reverse actual bits of the given number");
System.out.println(reverseBinaryBits(input));
}
}
আউটপুট
Reverse actual bits of the given number 11