এই সমস্যায়, আমাদের একটি সংখ্যার নির্দিষ্ট সূচক বা পজিশনে বিট আপডেট করতে হবে। একটি প্রদত্ত সংখ্যার ওপর বিট ম্যানিপুলেশন অপারেশন ব্যবহার করে এই কাজটি করা যায়। উদাহরণস্বরূপ,
ইনপুট-১
N = 25, bit = 1, position = 2
আউটপুট
29
ব্যাখ্যা
প্রদত্ত ইনপুট ২৫ কে বাইনеріতে '১১০০১' হিসেবে লেখা যায়। যেখানে পজিশন সূচক '২' এবং বিট '১'। প্রদত্ত পজিশনে ডিজিটটি প্রতিস্থাপন করার পর আউটপুট হবে '১১১০১' যা দশমিকে '২৯' এর সমান।
সমাধানের পদ্ধতি
একটি সংখ্যার নির্দিষ্ট পজিশনে বিট আপডেট করার জন্য প্রথমে ঐ পজিশনের বিটটি ক্লিয়ার করা হয়, তারপর বাইনারি OR অপারেশন দিয়ে নতুন বিটটি সেট করা হয়।
- সংখ্যা N, আপডেট করার বিট (bit) এবং পজিশন (position) ইনপুট নিন।
- একটি ফাংশন
updateBit(int &n, int bit, int pos)তৈরি করুন যা নম্বরটির ঠিকানা, বিট মান এবং সূচক নেয়। ফাংশনটি আপডেট হওয়া মান প্রিন্ট করবে। - প্রদত্ত পজিশনের বিটটি ক্লিয়ার করুন এবং ফলাফলে নতুন বিটটি যোগ করুন।
- একটি মাস্ক তৈরি করুন এবং AND অপারেশন সম্পাদন করুন।
- তैयার মাস্কের সাথে বাইনারি OR অপারেশন এবং মানকে ডানদিকে শিফট করুন।
উদাহরণ
#include <iostream>
using namespace std;
void updateBit(int &n, int bit, int pos) {
int clearBit = ~(1 << pos);
int mask = n & clearBit;
n = mask | (bit << pos);
}
int main() {
int n = 25;
int bit = 1;
int pos = 2;
updateBit(n, bit, pos);
cout << n;
return 0;
}
আউটপুট
29
ইনপুট ২৫ বাইনারিতে ১১০০১। পজিশন ২-তে ১ বসালে এটি ১১১০১ হয়ে যায়, যা দশমিক ২৯।